Skip to content

Latest commit

 

History

History
56 lines (52 loc) · 1.58 KB

1.let&const.md

File metadata and controls

56 lines (52 loc) · 1.58 KB

let

ES6新增了let指令, 作用是用来声明变量,用法类似于var。

与var的区别

1.作用域

在函数内用var声明时他的作用域为整个函数, 而let声明的变量只在当前代码块中有效。 例子: 文件: 1.let&const.js 0x01

2.声明提前

由于用用var声明的变量会声明提前, 所以代码在执行到赋值语句之前使用该变量,代码不会报错,而是会读出undefined。 但let声明的语句不会声明提前,所以这种情况下就会报引用错误

// var 的情况
console.log(foo); // 输出undefined
var foo = 2;

// let 的情况
console.log(bar); // 报错ReferenceError
let bar = 2;

3.暂时性死区

由上面第2点提到,由于let没有声明提前, 且它是块级作用域,因此在没执行到声明语句之前,这个变量名彼便无法使用

var tmp = 123;
if(true){
  tmp = 'abc'; // 报错
  let tmp;
}

4.不允许重复声明

let 不允许在相同作用域内重复声明同一个变量

// 报错
function () {
  let a = 10;
  var a = 1;
}

// 报错
function () {
  let a = 10;
  let a = 1;
}

const

const声明一个只读的常量。一旦声明,常量的值就不能改变。 因此const一旦声明,就必须立即初始化,不能留到以后赋值。 而且只声明不赋值,就会报错。

const foo; // SyntaxError

注意事项

    1. const在作用域,变量提升问题上同let一致
    1. 当const的值为引用类型时,它并不能保证内部的值不被修改,只能保证引用地址不变