第 1 章 JS变量、作用域
@(es5)
- 基本类型
- 引用类型
一、 判断变量类型
typeof(能够判断的值:undefined、string、number、function;其他的类型,如对象、数组、null和undefined均判断为object)instanceof(不推荐)getPrototypeName()
Object.getPrototypeName.call(null,variable) === '[object array]'
Object.getPrototypeName.call(null,variable) === '[object object]'
isNaN(NaN)
Array.isArray(ary)
二、作用域 和 上下文
- 变量生命周期
在函数内声明的 变量,在函数执行完了就会结束。 - 访问变量
先在函数内部查找有无变量,若没有,则在函数外部的包裹自身的函数查找,这样依次查找,直至找到全局作用域下。
ps: var只对第一个变量前的的等号起作用,后面有变量则是全局作用下,(不推荐这种写法)。
function foo() {
var x = y = 0;
}
y;// 0
1. 作用链
ps:闭包可以改变函数的作用链(延长作用链)
function foo() {
var x = 0;
return function () {
return ++x;
}
}
var b = foo();
b();//1
b();//2
2. 上下文(this)
在es5中,this的指向是调用时使用的对象
function fn () {
console.log(this)
}
fn() // window
const person = {
say: function () {
console.log(this)
}
}
person.say() // person
setTimeout(function () {
console.log(this === window) // true
})
ps: setTimeout 和 setInterval 第一个参数function的this指向是window
二、JS的解析机制
1. 预解析
- 执行代码在前,
function预解析高于var。
console.log(a); //function () { ... }
var a = 0;
function a() {
//TODO
}
function fn(){}这种形式是预解析,不是变量赋值。即,如果var声明的变量和function fn(){}的函数同名,在执行过程中执行var中的变量,而function对应函数不存在。
console.log(a); //function () { ... }
var a = 2;
function a() {
console.log('fn a()');
}
console.log(a); // 2
// var a = 3;
a(); // error: a is not a function
或
console.log(a); //function () { ... }
var a = 2;
console.log(a); // 2
// var a = 3;
a(); // error: a is not a function
function a() {
console.log('fn a()');
}
三、垃圾收集
历史问题:标记清楚、引用计数、性能问题、管理内存
- 只要重复引用,用变量代替
- 内存少用,能够消除的一定销毁
内存管理销毁
var global_variable = null;
第 1 章 JS变量、作用域的更多相关文章
- [刘阳Java]_步步窥探JS变量作用域
今天的这个文章题目名称甚是让人会突发异想.JS变量作用域是务必需要搞懂的,单从面试过程就会让面试者烧脑壳.所以,我们还是写一篇关于JS变量作用域的技术专题,让所有小伙伴能够借此文章去整理JS的基础学习 ...
- [Effective JavaScript 笔记]第2章:变量作用域--个人总结
前言 第二章主要讲解各种变量作用域,通过这章的学习,接触到了很多之前没有接触过的东西,比如不经常用到的eval,命名函数表达式,with语句块等,下面是一个列表,我对各节的一点点个人总结,很多都是自己 ...
- 原型模式故事链(5)--JS变量作用域、作用域链、闭包
上一章 JS执行上下文.变量提升.函数声明 传送门:https://segmentfault.com/a/11... 本次我们主要讲讲变量作用域和闭包变量作用域:顾名思义:变量起作用的范围.变量分为全 ...
- 解释JS变量作用域的范例
JS的变量作用域只有两种:全局作用域与函数作用域. 用var声明的变量不能简单的说是属于函数作用域,应该是说属于其最近的作用域. var a = 10; function test(){ var a; ...
- 浅谈js变量作用域
变量的作用域也是前端面试题常考的一个问题,掌握下面几个规律可以帮你更好的理解js的作用域. 1.作用域优先级遵循就近原则,函数内部的作用域优先级大于外部 var a=456; var b=111; f ...
- js变量作用域--变量提升
1.JS作用域 在ES5中,js只有两种形式的作用域:全局作用域和函数作用域,在ES6中,新增了一个块级作用域(最近的大括号涵盖的范围),但是仅限于let方式申明的变量. 2.变量声明 var x; ...
- javaScript的闭包 js变量作用域
js的闭包 js的变量作用域: var a=90; //定义一个全局变量 function test(){ a=123; //使用外层的 a变量 } test(); document.write(&q ...
- JS变量作用域与解构赋值
用var变量是有作用域的 变量在函数内部声明时,那么该变量只属于整个函数体,函数外不可调用 当两个不同的函数里,使用了用一个相同的变量名,二者不互相影响,相互独立 遇到嵌套函数时,外部函数不可调用内部 ...
- 第三章 Js变量的作用域和匿名函数
3.1 先看下面的事例: ①var temp=0; ②temp=0; 当js解析器检测到①这种情况的时候,解析器会为这个变量开辟一个内存空间,如果前面已经存在这个变量,就会把这个变量覆盖掉. 当解析器 ...
随机推荐
- 【MySql】常用方法总结
将一个字段分组,统计每组重复个数,并排序 SELECT Customer, OrderDate, count(*) as Num FROM `all_orders` GROUP BY Customer ...
- 【python】随机数用法
全文拷贝自:Python随机数用法 random.seed(int) 给随机数对象一个种子值,用于产生随机序列. 对于同一个种子值的输入,之后产生的随机数序列也一样. 通常是把时间秒数等变化值作为种子 ...
- VS2010 集成标准com组件
#include <Windows.h> #include <stdio.h> // import后,会提示找不到对应的SignCtrl.tlh文件,只需要对项目重新编译一下, ...
- Linux-CentOS 重置root密码
1. 重启服务器,在读秒的时候按任意键,就会出现如下界面 2.接着按下e就会进入到如下界面. 将光标移动到kernel那一行,然后再一次按‘e’,进入kernel该行的编辑界面 3.这就是kernel ...
- Accumulation Degree
#include<cstdio> #include<cstring> #define INF 0x7fffffff using namespace std; ; inline ...
- linux下安装redis并开机自启动
分享一个博客地址, 写的太好了, 满满的都是干货 ! https://www.cnblogs.com/renzhicai/p/7773080.html
- Redis数据结构之sds基本操作函数
本文及后续文章,Redis版本均是v3.2.8 本篇文章讲解sds基本操作函数,我们从源码角度来进一步理解. 一.sds创建函数和销毁 sds创建函数 /* Create a new sds stri ...
- vscode断点调试工程化服务端文件
一.创建express应用我们使用express-generator创建一个新的express应用.1.全局安装express-generator // 安装 sudo npm install exp ...
- python 列表常用方法
1.在列表末尾添加新的对象 li=[11,22,33,'aa','bb','cc'] li.append('dd') print(li) 2.清空列表 li=[11,22,33,'aa','bb',' ...
- 解决:coursera 视频总是缓冲或者无法观看
关于这个问题,网上有很多的答案,但是可能我是win10 最近才更新了的,网上的方法都不能完全解决,然后自己搜了哈,最后综合自己解决了.具体方法如下. 在开始菜单中打开运行命令,输入gpedit.msc ...