Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javascript设计模式-未获得预期结果_Javascript - Fatal编程技术网

javascript设计模式-未获得预期结果

javascript设计模式-未获得预期结果,javascript,Javascript,我截取了这个密码。我得到了a作为未定义的。这是否应该显示在父函数中传递的参数值 function test(a) { return function(a) { console.log('a is : ' + a); // Output: a is undefined }(); } test('A should not be undefined? '); 只需从闭包中删除a参数: function test(a) { return function()

我截取了这个密码。我得到了
a
作为
未定义的
。这是否应该显示在父函数中传递的参数值

function test(a) {
    return function(a) {
        console.log('a is : ' + a); // Output: a is undefined
    }();
}

test('A should not be undefined? '); 

只需从闭包中删除
a
参数:

function test(a) {
    return function() {
       //          ^^
        console.log('a is : ' + a);
    }();
}
,但我要试一试:
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();

只需从闭包中删除
a
参数:

function test(a) {
    return function() {
       //          ^^
        console.log('a is : ' + a);
    }();
}
,但我要试一试:
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();

您应该将变量作为参数传递给返回自调用函数

请看下面的代码:

function test(a) {
    return function(a) {
       console.log('a is : ' + a); 
    }(a);
}

test('A should not be undefined? '); 

您应该将变量作为参数传递给返回自调用函数

请看下面的代码:

function test(a) {
    return function(a) {
       console.log('a is : ' + a); 
    }(a);
}

test('A should not be undefined? '); 

描述新函数时,
a
表示内部范围中的局部变量,它隐藏传递给
test
方法的
a

与以下内容相同:

function test(a) {
    return function(a_inner) {
        console.log('a_inner is : ' + a_inner);
    }(); // <--- here
}

描述新函数时,
a
表示内部范围中的局部变量,它隐藏传递给
test
方法的
a

与以下内容相同:

function test(a) {
    return function(a_inner) {
        console.log('a_inner is : ' + a_inner);
    }(); // <--- here
}

问题在于
console.log中的
a
是(匿名)内部函数的参数,它屏蔽了外部函数之一。通过重命名内部函数的参数(在lambda演算中),可以更清楚地说明这一点:


正如@andy所建议的,最简单的解决方案是从内部函数中删除参数。外部函数中的绑定仍然可见,因此将改为使用。

问题在于
控制台中的
a
。log
是(匿名)内部函数的参数,它屏蔽了外部函数之一。通过重命名内部函数的参数(在lambda演算中),可以更清楚地说明这一点:


正如@andy所建议的,最简单的解决方案是从内部函数中删除参数。外部函数中的绑定仍然可见,因此将改为使用。

或将其作为参数传递:
函数测试(a){return function(a){console.log('a is:'+a);//输出:a未定义}(a);}
请给我一些解释。我试图抓住闭包的这个概念。非常有意义。谢谢或者将其作为参数传递:
函数测试(a){return function(a){console.log('a is:'+a);//输出:a is undefined}(a);}
您能给我一些解释吗。我试图抓住闭包的这个概念。非常有意义。谢谢