面试历程之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调用,而不用一级级向上寻找

 

posted @ 2015-05-25 13:50  想子  阅读(226)  评论(0)    收藏  举报