<分区>
我知道当我在循环中声明一个 let 变量时,该变量在每个循环中都被声明。例如:
for(let i=0 ; i<3 ; i++)
{
let x=1;
}
变量 x
声明了 3 次,即在内存中为循环中的每个变量分配了三个不同的位置。
但是变量 i
发生了什么?是声明一次吗?
还是只初始化了一次却又声明了三次?
我想了解幕后发生的事情。
<分区>
我知道当我在循环中声明一个 let 变量时,该变量在每个循环中都被声明。例如:
for(let i=0 ; i<3 ; i++)
{
let x=1;
}
变量 x
声明了 3 次,即在内存中为循环中的每个变量分配了三个不同的位置。
但是变量 i
发生了什么?是声明一次吗?
还是只初始化了一次却又声明了三次?
我想了解幕后发生的事情。
最佳答案
使用 let
时,i
被声明一次,并在每个循环中获得一个新的绑定(bind)。并且其范围仅在 block 语句内部可见。
从这里Variables and scoping in ECMAScript 6 :
let
in loop headsIn loops, you get a fresh binding for each iteration if you
let
-declare a variable. The loops that allow you to do so are:for
,for-in
andfor-of
.
for (let i = 0; i < 3; i++) {
let x = 1;
setTimeout(() => console.log(i), 1000);
}
另一个带有赋值的示例,用于重新绑定(bind)。
for (let x = { v: 0 }; x.v < 2; x.v += 1) {
setTimeout(() => console.log(x), 100); // same values
}
for (let x = { v: 0 }; x.v < 2; x = { v: x.v + 1}) {
setTimeout(() => console.log(x), 100); // different values
}
.as-console-wrapper { max-height: 100% !important; top: 0; }
关于javascript - 当我使用 let 声明时,初始化区域中语句的语义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59967000/
相关文章:
javascript - 使用 vscode 时是否应该为 es6 项目提交 typings 文件夹?
javascript - '不支持 ES 模块的 require()。 ' Node.js、express、swagger-jsdoc 出错
javascript - AngularJS 绑定(bind)到 WebGL/Canvas
Javascript:对象和函数...有人可以解释为什么这不起作用吗?
javascript - React Router v4 - 嵌套路由问题
javascript - 如何在 JavaScript 中使函数参数保持不变?
javascript - 在 Promise 中使用 await