guoshuai93 / blog

19 stars 2 forks source link

ES6 必知必会(1):let 和 const #22

Open guoshuai93 opened 6 years ago

guoshuai93 commented 6 years ago

let 和 const

ES6 历史

ECMAScript 6.0(以下简称 ES6)是 JavaScript 语言的下一代标准,已经在 2015 年 6 月正式发布了。它的目标,是使得 JavaScript 语言可以用来编写复杂的大型应用程序,成为企业级开发语言。

各大浏览器对 ES6 的支持情况可以在这里查看:kangax.github.io/compat-table/es6/

实际生产如果选择用 ES6 中的新特性进行开发,但担心浏览器可能不支持,可以上线前在本地编译成 ES5 的代码,了解 babel

let

{
  let a = 6;
}
console.log(a); // ReferenceError: a is not defined

var 命令在代码编译初期,会提升变量到最上方,并赋值为 undefined。而 let 命令不存在提升变量的作用。所以使用 let 声明的变量必须先声明再使用

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

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

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

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

function func(arg) {
  let arg; // 报错
}

const

用来声明一个只读的常量,一旦设置就不能再次改变。

const Max_length = 10;

Max_length = 13; // TypeError: Assignment to constant variable.

同时意味着最开始设置一个常量的时候,必须给予赋值,否则同样会报错。

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

还有一些特性类似于 let:只在所在作用域内有效,声明的常量不会被提升(只能先声明后使用),不可重复声明。