ES6 新的两种宣告方式,主要是用来取代var
旧式宣告,新的方式让变数本身涉及的範围变小了,改善了许多潜在问题。
let es6 = 'Hello World';const Pi = 3.14;
let 变数宣告
let
宣告方式类似于var
变数不允许被重複宣告
只受区块作用域(Block Scope)内影响,意思是变数的作用範围只在大括号{}
中有效
var
会自动宣告为全域变数的问题所以let
非常适合使用在for
迴圈中// let 只会在区块作用域内有效if (true) { let a = 10; var b = 20;}console.log(a); // ReferenceError: a is not defined.console.log(b); // 20// 使用 var 在 for 迴圈上 i 会自动成为全域变数for (var i = 0; i < 5; i++) { setTimeout(function () { console.log('Times: ' + i); }, 100);}// 产生 'Times: 5' 5 次相同的结果// 因为函数里的 i 会指向同一个全域变数 i (最终改变的结果)// 使用 let 在 for 迴圈上for (let i = 0; i < 5; i++) { setTimeout(function () { console.log('Times: ' + i); }, 100);}// 产生 'Times: 0 ~ 4' 5 次不同的结果
立即执行函数表达式(IIFE)可以不必再使用了因为变数不会汙染到全域环境中// IIFE 写法(function () { var tmp = 'Hi'; // ...}());// 区块作用域写法,一样可以达到相同效果{ let tmp = 'Hi'; // ...}
const 常数宣告
当宣告为一般的数据类型 (string、number、boolean) 时
一定要赋予值不能再被修改当宣告为物件或阵列 (object、array) 时
内层的属性是可以被修改或新增的代表const
是指向固定的记忆体位址,所以与本身内在的属性无关,只是无法再让本身指向另一个位址(变数)而已const school = { name: 'Hello World', student: 10};// 物件本身内的属性是可以被修改或新增的 school.name = 'ES6';school.teacher = 3;console.log(school); // {// name: 'ES6',// student: 10,// teacher: 3// }// 当被宣告为常数的物件时,就不能再去指向其他值了school = {}; // TypeError: Assignment to constant variable.