这是否使用范围链?

时间:2015-09-08 15:22:57

标签: javascript

var a = 1;

function hello() {
   (function(){
      alert(a);
   }());
}

或者仅在使用prototype属性将对象链接在一起时才使用范围链吗?

2 个答案:

答案 0 :(得分:4)

是的,使用范围链。范围链与闭包更相关。

当调用hello时,为获取a的{​​{1}}值,将在内部匿名函数中搜索变量alert(a)

没有找到任何东西,它向上移动到函数a,然后向上移动到定义hello的函数/全局作用域。

答案 1 :(得分:4)

我不确定我是否理解你的问题,但我会尽力回答。您在全局范围c中声明了一个变量。在a中有函数声明和IIFE作为闭包之后。当您致电hello时,IIFE将执行,因为在本地范围内,没有任何变量hello将上升到全局范围。警惕a

1

在下一个示例中,我声明了一个局部变量var a = 1; function hello() { (function() { alert(a); }()); } hello();//alerts 1,因此警报将为3。

a