Javascript 匿名函数和参数
当我执行这段代码时,我得到了以下输出:Javascript 匿名函数和参数,javascript,performance,Javascript,Performance,当我执行这段代码时,我得到了以下输出:no,因此输出是正确的。但是当我执行下一段代码时,当我将函数bar作为参数传递给该匿名函数时,我不知道为什么输出是未定义的 function foo() { var bar = 'no' setInterval(function() { console.log(bar); }, 1000); } 如果我将变量作为参数传递,为什么是未定义的?如果匿名函数中还有一个变量调用bar,我知道该变量将被内部函数值重写,但我无法理解这种行为在您创建闭包
no
,因此输出是正确的。但是当我执行下一段代码时,当我将函数bar
作为参数传递给该匿名函数时,我不知道为什么输出是未定义的
function foo() {
var bar = 'no'
setInterval(function() { console.log(bar); }, 1000);
}
如果我将变量作为参数传递,为什么是未定义的?如果匿名函数中还有一个变量调用
bar
,我知道该变量将被内部函数值重写,但我无法理解这种行为在您创建闭包的第一个示例中,您创建的函数链接到bar
变量。它不会作为参数传递给函数。当setInterval
以后在不提供任何参数的情况下调用该函数时,由于该函数已关闭bar
变量,因此该函数按预期工作
在第二个示例中,您没有将变量作为参数传递。您描述了一个函数,它接受一个参数,并且不覆盖任何对象。然后稍后setInterval
以相同的方式调用该函数,不提供任何参数。如果javascript中未提供参数,则该参数将变为未定义
(您可以使用任意数量的参数在js中调用函数,而不管该函数是用什么参数声明的)
更多关于闭包的阅读:在第一个示例中,您创建了一个闭包——您创建的函数链接到
bar
变量。它不会作为参数传递给函数。当setInterval
以后在不提供任何参数的情况下调用该函数时,由于该函数已关闭bar
变量,因此该函数按预期工作
在第二个示例中,您没有将变量作为参数传递。您描述了一个函数,它接受一个参数,并且不覆盖任何对象。然后稍后setInterval
以相同的方式调用该函数,不提供任何参数。如果javascript中未提供参数,则该参数将变为未定义
(您可以使用任意数量的参数在js中调用函数,而不管该函数是用什么参数声明的)
更多关于闭包的阅读:调用回调时,调用它时不带参数,因此隐藏外部
条的参数是未定义的
您可以将参数作为setInterval
的参数传递:
function foo() {
var bar = 'no'
setInterval(function(bar) { console.log(bar); }, 1000);
}
调用回调时,调用时不带参数,因此外部条
的阴影参数为未定义的
您可以将参数作为setInterval
的参数传递:
function foo() {
var bar = 'no'
setInterval(function(bar) { console.log(bar); }, 1000);
}