ECMAScript 中的 let 和var

一:var声明的变量

全局作用域、局部作用域

var a = 1;     //a为全局变量,可以在任何地方使用

for(var i = 0; i < 3; i++){   //i 为全局变量                                                       

   function ff(){

       var b = "b" //b为局部遍历,只能在ff中使用

   }

}

console.log(a,b,i)    //结果为:1、报错(not defined)、4

二:let声明的变量

一:let声明的变量只在let命令所在的代码块内有效。如下面for循环中 i 就只在for循环中有效

二:不存在变量提升

三:不存在变量提升(使用的变量必须先声明)

四:let不允许在相同作用域内,重复声明同一个变量。(下面的for是个例外)

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

let  a = 1;    //a为全局变量,可以在任何地方使用

for(let i = 0; i < 3; i++){   //i 为全局变量

   function ff(){

      let b = "b" //b为局部遍历,只能在ff中使用

}

}

console.log(a,b,i)    //结果为:1、报错(not defined)、报错

for(var i = 0; i < 3; i++){

      i = "a"      // 即  var  i = "a"   i  作为全局变量,被赋值 a 所以循环只走了一次  就结束了

      console.log(i)   //打印一次 “a”

}


for(let  i = 0; i < 3; i++){

i = "a"      //    i  作为for代码块的局部变量,被赋值 a, 所以循环只走了一次  就结束了

console.log(i)   //打印一次 “a”

// 若改为下面的

let  a = "a"

console.log(a)   //打印 3 次 “a”

}

你可能感兴趣的:(ECMAScript 中的 let 和var)