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);}
您能给我一些解释吗。我试图抓住闭包的这个概念。非常有意义。谢谢