var a = 1;
function hello() {
(function(){
alert(a);
}());
}
或者仅在使用prototype
属性将对象链接在一起时才使用范围链吗?
答案 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