Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/442.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,我只是想理解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); /

我只是想理解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);  // 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