ES6新特性之var 与 let ,const的区别

let命令

  • let命令用来定义变量,其定义的变量只在代码块内有效
    而var定义的变量在全局范围内都有效
{
var p=2;
let a = 1;
}
p // 2
a // ReferenceError
  • let命令没有变量提升
    若在定义一个变量之前使用该变量则会抛出 ReferenceError 错误
    而var则会将该变量视为 undefined
p = 3;
let p;  // ReferenceError
console.log(a); // 输出undefined
var a = 2;

(这个特性会迫使程序猿们养成先定义后使用的习惯, 同时避免var的 undefined 产生难以查找的错误)

ES6新特性之var 与 let ,const的区别_第1张图片
  • let不允许重复声明同一变量
{
var a;
let a;    // error
}

{
let a=1;
let a;  //error
}

const命令

  • const用来声明一个只读的常量, 一旦声明,常量的值不可改变
    声明时必须初始化,否则会报错
const a = 1;
a = 5;  //TypeError: Assignment to constant variable.

const p;  //SyntaxError: Missing initializer in const declaration
  • const 只在声明其所在的块级作用域内有效
  • const 命令声明的常量也没有变量提升,只能在声明的位置后面使用
  • 同样不可重复声明同一变量
注意:

对于复合类型的变量,变量名不指向数据,而是指向数据所在的地址。const命令只是保证变量名指向的地址不变,并不保证该地址的数据不变

const a = [];
a.push('Java'); // 可运行 此时a为['Java']
a = ['script'];    // error
块级作用域的优点
  1. 避免内层变量覆盖外层变量
  2. 避免用来计数的循环变量泄露为全局变量
  3. 引入了块级作用域,允许在块级作用域之中声明函数


    ES6新特性之var 与 let ,const的区别_第2张图片

so

const 和 let 用起来

你可能感兴趣的:(ES6新特性之var 与 let ,const的区别)