JavaScript设计模式 - 没有得到理想的结果

JS-*_*WEB 1 javascript

我把这段代码剪掉了.我得到aundefined.这不应该显示父函数中传递的参数值吗?

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)

And*_*ndy 5

只需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因为atest被调用时与闭包一起返回的函数.

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)

  • 或者将其作为参数传递:`function test(a){return function(a){console.log('a is:'+ a); //输出:a未定义}(a); }` (3认同)