Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/428.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_Performance - Fatal编程技术网

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);
}