let 和 const
块级作用域
var a = [];
for (let i = 0; i < 10; i++) {
a[i] = function () {
console.log(i);
};
}
a[6](); // 6块级作用域一定要有大括号作为表示:
// 报错,不能在单行语句中定义
if (true) let x = 1;没有变量提升
var
在声明前也可以使用let
在声明前不允许使用变量或再次的声明
// var 的情况
console.log(foo); // undefined
var foo = 2;
// let 的情况
console.log(bar); // ReferenceError
let bar = 2;暂时性死区
从块级作用域的开始到
let
声明前变量都是不可用的var tmp = 123;
if (true) {
tmp = 'abc'; // ReferenceError
let tmp;
}块级作用域可以直接创建,以及嵌套
{
{let insane = 'Hello World'}
console.log(insane); // 报错
}函数声明
- ES5 中,函数只能在函数作用域(包括全局)中,行为类似
var
- ES6 中,函数可以在块级作用域中定义,但如果声明成功则会提升
function f(flag) {
if (flag) {
function f() { console.log('true') }
}
f()
}
f(true) // true
f(false) // 报错,没有这个函数应当避免在块级作用域内声明函数,或者可以用函数表达式代替
- ES5 中,函数只能在函数作用域(包括全局)中,行为类似
const
- 声明的时候就应当初始化,一旦初始化,后续的修改将会报错
const
拥有和let
差不多的性质const
保存的是指向实际数据的指针,可以改变数据对象,但不可以改变引用- 如果想完全冻结对象,使用
Object.freeze(data)
方法
ES6 六种方法声明变量
- ES5:
var
function
let
const
import
class
- ES5: