前轮

由一道题图解JavaScript的作用域

2016-03-24  本文已影响0人  唔空

作用域

为了理解作用域,跪看了好几篇大神的博文,终于略知一二。

1.题目

其中,看到这样一道题(稍作修改):

 function factory() {
     var name = 'laruence';
     var intro = function(){
          console.log('I am ' + name);
          console.log('I am ' + age + "years");
     }
     return intro;
}
 
function app(para){
     var name = para;
     var age = 20;
     var func = factory();
     func();
}
 
app('eve');

运行结果是:

I am laruence
脚本报错:Uncaught ReferenceError: age is not defined

虽然在不理解作用域的情况下,我也做出了正确答案。但当我看了网上大神对作用域的讲解后,再来看此题,越看越经典,当初能做对,纯粹运气。当我将此题的作用域链画出来之后,终于感觉作用域入门了。

2.图解作用域

(1)JS引擎在进入一段可执行的代码时,需要完成以下三个初始化工作:

(2)当执行进入app('eve') 时

(3)当执行进入factory() 时

(4)当执行进入func()时
函数factory被执行以后,返回了intro的引用,并赋值给了变量func,执行 func() 就相当于执行intro()。

执行func()时,它的作用域链为 VO(G ) <- AO(f) <- AO(i),所以

执行完成,退出。

3.Javascript中的作用域

参考文献

上一篇下一篇

猜你喜欢

热点阅读