js ES6 var和let的区别

var方式

{ 
  var i = 9;
} 
console.log(i);  // 9

ES6新增的let,可以声明块级作用域的变量。

{ 
  let i = 9;     //i变量只在作用域内有效
} 
console.log(i);  //Uncaught ReferenceError: i is not defined var
var
for (var i = 0; i <10; i++) {
  setTimeout(function() {
    console.log(i);
  }, 10);
}
// 输出结果
10   共10个
let
for (let i = 0; i <10; i++) {
  setTimeout(function() {
    console.log(i);
  }, 10);
}
// 输出结果
0  1  2  3  4  5  6  7  8 9
let a = 0;
let a = 'aa';
// Uncaught SyntaxError: Identifier 'a' has already been declared

const 声明一个只读变量,声明之后不允许改变。意味着,一旦声明必须初始化,否则会报错。

基本用法:

const PI = "3.1415926";
PI  // 3.1415926

const MY_AGE;  // SyntaxError: Missing initializer in const declaration    

暂时性死区:

var PI = "a";
if(true){
  console.log(PI);  // ReferenceError: PI is not defined
  const PI = "3.1415926";
}

ES6 明确规定,代码块内如果存在 let 或者 const,代码块会对这些命令声明的变量从块的开始就形成一个封闭作用域。代码块内,在声明变量 PI 之前使用它会报错。

评论