美文网首页
var 和let

var 和let

作者: 如果俞天阳会飞 | 来源:发表于2019-04-12 11:40 被阅读0次
 for (var i = 0; i < 4;i++){
     function f() {
       console.log(i)
     }
   }
 console.log(i)  \\4 
f() \\ 4

上面代码中,变量i是var命令声明的,在全局范围内都有效,所以全局只有一个变量i。每一次循环,变量i的值都会发生改变 当 i 为 3时 i先 加加 然后判断 大小

 for (let i = 0; i < 4;i++){
     function f() {
       console.log(i)
     }
   }
f() \\ 3
f() \\ 3

上面代码中,变量i是let声明的,当前的i只在本轮循环有效,所以每一次循环的i其实都是一个新的变量,。你可能会问,如果每一轮循环的变量i都是重新声明的,那它怎么知道上一轮循环的值,从而计算出本轮循环的值?这是因为 JavaScript 引擎内部会记住上一轮循环的值,初始化本轮的变量i时,就在上一轮循环的基础上进行计算。

另外,for循环还有一个特别之处,就是设置循环变量的那部分是一个父作用域,而循环体内部是一个单独的子作用域。

for (let i = 0; i < 3; i++) {
  let i = 'abc';
  console.log(i);
}
// abc
// abc
// abc

上面代码正确运行,输出了 3 次abc。这表明函数内部的变量i与循环变量i不在同一个作用域,有各自单独的作用域。

相关文章

网友评论

      本文标题:var 和let

      本文链接:https://www.haomeiwen.com/subject/nbnxwqtx.html