openks / learn-vue

自定义组件文档
https://openks.github.io/learn-vue
0 stars 0 forks source link

深入理解let #40

Open openks opened 7 years ago

openks commented 7 years ago

从各个地方了解到的let知识如下:

  1. let 声明的变量的作用域是块级的;
  2. let 不能重复声明已存在的变量;
  3. let 有暂时死区,不会被提升。
for( let i=0; i<10; i++){
    console.log(i);
//既然作用域是块级的,在大括号里没声明i,
//那按照已有的理解就应该无法使用,实际却非如此
//只能说明理解有误
}
openks commented 7 years ago

看了知乎上的解释算是了解了

for( let i = 0; i< 5; i++) 这句话的圆括号之间,有一个隐藏的作用域 for( let i = 0; i< 5; i++) { 循环体 } 在每次执行循环体之前,JS 引擎会把 i 在循环体的上下文中重新声明及初始化一次。

MDN上的例子是这样的

var list = document.getElementById("list");

for (let i = 1; i <= 5; i++) {
  var item = document.createElement("LI");
  item.appendChild(document.createTextNode("Item " + i));

  let j = i;//这里是重点 
  item.onclick = function (ev) {
    console.log("Item " + j + " is clicked.");
  };
  list.appendChild(item);
}

按我的理解应该是在大括号作用域里重新声明了一个变量i,只不过这个i和括号里的i一样罢了