由作用域链引发的一个小问题

来源:互联网 发布:魔方拼图软件 编辑:程序博客网 时间:2024/05/29 03:12

在写上一篇博文的过程中发现了一个小问题,

var a=2;function f(){    var b=a;    f2=function(y){        return y;    }}f();console.log(f2(b));//not defined 而不是 2

由于f2是闭包,能访问f2作用域链中的变量b,最开始我以为结果会输出2,但结果被打脸。

原因是我弄混了作用域链和函数之间的关系。要理解作用域链,最重要的是下面这句话:

每一段js代码(全局代码或函数)都有一个与之关联的作用域链。

也就是说,作用域链是与代码相关联的,f2(b)是全局代码而不是f2()的代码,因此在执行时所关联的作用域链是全局对象,并不能访问f的活动对象,因此输出b为not defined。

0 0
原创粉丝点击