Javascript 理解闭包,为每个迭代创建不同的范围
我只是想理解Javascript中的闭包。我遇到了以下三个例子。Javascript 理解闭包,为每个迭代创建不同的范围,javascript,Javascript,我只是想理解Javascript中的闭包。我遇到了以下三个例子。 示例1: for(var i=0;i这是因为let使用块作用域进行操作(var没有)。这意味着这就像在构成for语句的代码块中声明局部变量一样 例如,您可以执行以下操作: if (blockCount === 3) { let x = 1; // do something with x } else { let x = 2: // do something with x } console.log(x); /
示例1:
for(var i=0;i这是因为let
使用块作用域进行操作(var
没有)。这意味着这就像在构成for语句的代码块中声明局部变量一样
例如,您可以执行以下操作:
if (blockCount === 3) {
let x = 1;
// do something with x
} else {
let x = 2:
// do something with x
}
console.log(x); // undefined since no longer in scope
这将按编写的方式工作。如果您尝试在If
语句之外访问x
,则它将是未定义的
有关更多信息,请参见。在第一个示例中,您调用一个setTimeout()
,它在一定时间后打印变量i
。当setTimeout()
回调启动时,循环已经完成,并且i
拥有最后一个迭代值(11)。所有回调都打印该变量
在第二个示例中,使用立即调用的函数表达式()。这是一个立即定义和调用的函数,并将参数i
传递给它。
将参数传递给函数时,就像声明了一个新的局部变量。例如:
var foo=5;
函数myLog(foo){
console.log(foo);
}
myLog(“not 5”);//记录“not 5”而不是5