试图从David Shariff 的博客中理解范围链和执行上下文堆栈文章,我试图在这里理解闭包
function foo() {
var a = 'private variable';
return function bar() {
alert(a);
}
}
var callAlert = foo();
callAlert(); // private variable
我只是想测试内部函数是否仅具有来自其父级或整个作用域链的变量对象,因此我添加了一个重复该示例的嵌套函数:
function foo() {
var a = 'private variable';
return function bar() {
return function foobar() {
console.log(a);
};
};
}
var callAlert = foo();
callAlert(); //
这并没有给出任何结果。似乎解释器甚至没有进入foobar()函数。并且语法与其父级相同。
但如果我将函数声明和执行分开,它就会起作用。
function foo() {
var a = 'private variable';
return function bar() {
function ra() {
console.log(a);
};
return ra();
};
}
var callAlert = foo();
callAlert(); // private variable
真的,我试图猜测为什么;bar()和foobar()函数的区别在哪里。
PS - 我在JSFiddle上测试