ES6入门
第一章
1、let命令:一是用来声明变量,二是只在let命令所在代码块的区域内起作用
var a = 100;
var b = 200;
console.log(a); // 100
console.log(b); // 200 let命令是可以用来声明变量的
{
var a = 100;
let b = 200; // 只作用于大括号的内部,超出大括号所在的区域,将不识别b
}
console.log(a); // 100
console.log(b); // b is not defined(b 没有声明定义) ---Error
2、let命令不存在变量提升
//ES5
var a = [];
for (var i = 0;i < 10; i ++) {
var c = i;
a[i] = function () {
console.log(c);
}
}
a[5](); // 9
/*因为i会不断的运行,而c是全局的,它会不断的取到i的值,直到循环体结束(i=9)*/
//ES6
var d = [];
for(var j = 0; j < 10; j++){
let f = j;
d[j] = function () {
console.log(f);
}
}
d[5](); // 5
/*由于当j为5的时候,f取到j的值,当下一次循环时,f已经变成新的值,变成新的模块里面的值,故当j为5时,直接输出5*/
3、暂时性死区:只要块级作用域内存存在let命令,它所声明的变量将会绑定这个区域,不受外部所干扰
{
console.log(a); // undefined
let a = 100;
console.log(a); // 100
}
/*let声明的变量,必须先定义在使用,因为它只作用(绑定)这个区域,上面第一个console.log虽然在let所定义的区域内,但是在它未声明前就使用,依然显示未定义这种现象称为暂时性死区*/
var a = 200;
{
console.log(a); // undefined
let a = 100;
console.log(a); // 100
}
/*第一个console.log还是打印未定义,说明let定义的区域内,是不受外界影响的,全局声明的a不会作用于大括号内部,来改变a的值*/
4、let不允许重复声明
{
var a = 100;
var a = 200;
console.log(a); // 200
}
{
let a = 300;
console.log(a); // 300
}
/*在模块与模块之间,是可以声明重复的变量,他们将互不干扰哦*/
//模块之间不影响,可以重复声明
{
var a = 100;
var a = 200;
}
//报错:在模块内部,不允许用let重复声明变量
{
var a = 100;
let a = 200;
}
//报错:let不允许重复声明
{
let b = 200;
let b = 300;
}