面试历程之Second Blood(作用域链相关)
前两天出去面试,面试官问了我作用域链是什么,举个例子,直接懵了,说的错误的一逼,今天专门查了下,找了个图解的感觉挺不错,自己也弄一个,也会附上 参考文章的链接。
形成原因:js中的function是对象。(个人感觉是这个原因造成的)
1.简单一点的
function A(){
var a=4;
console.log(a);
}
console.log(a);
在函数内部的作用域链如下图(函数外部就直接是window,所以第二个会报错):

2.加点难度
var a=3;
function A(){
var a=4;
console.log(a);
}
console.log(a);
在函数内部作用域如下图(第一次输出4,第二次输出3)

在函数内部获取变量a的值时,先从作用域链的第一个元素开始获取,a=4,直接输出
3,算是个与第一二个的比较吧
var a=3;
function A()
{
console.log(a);
}
结果肯定是无争议的3,函数内部读取外部变量。
请看下图(与第一和第二个刚好有个比较)

读取变量a的时候会先从作用域链的最前端开始读取,没有发现a变量,然后就去读取作用域链上第二个,获取a=3,输出
我觉得这也是把在jquery中把window对象当做参数传入的原因,如果用到全局变量可以直接用window调用,而不用一级级向上寻找

浙公网安备 33010602011771号