我把这段代码剪掉了.我得到a了undefined.这不应该显示父函数中传递的参数值吗?
function test(a) {
return function(a) {
console.log('a is : ' + a); // Output: a is undefined
}();
}
test('A should not be undefined? ');
Run Code Online (Sandbox Code Playgroud)
只需a从闭包中删除参数:
function test(a) {
return function() {
// ^^
console.log('a is : ' + a);
}();
}
Run Code Online (Sandbox Code Playgroud)
有比这更好的解释,但我会给它一个去:test返回一个"捕获"它所在的环境(或范围)的函数(闭包),包括所有变量,并带它们.因为您正在向该函数传递一个参数,所以console.log期待它.但是因为它是一个立即调用的函数,你需要传入a函数(就像Aravinder在他/她的答案中所示),或者不需要,只是允许闭包使用a那个"传递给它"的父函数.
希望这很有帮助.
公平地说,这不是你经常遇到的模式(或者,至少,我没有).你更有可能看到这样的东西.这bob是一个包含a因为a在test被调用时与闭包一起返回的函数.
function test(a) {
return function() {
console.log('a is : ' + a);
};
}
var bob = test('A should not be undefined?');
bob();
Run Code Online (Sandbox Code Playgroud)