es6 相关知识点
let 以及 const
let命令
-
let 声明的变量只在它所在的代码块有效。
//let 声明 只在当前作用域有效 var a = []; for (let i = 0; i < 10; i++) { a[i] = function () { console.log(i); }; } a[6](); // 6 //var 声明 在全局作用域有效 var a = []; for (var i = 0; i < 10; i++) { a[i] = function () { console.log(i); }; } a[6](); // 10
-
let 不存在变量提升,在let声明之前使用变量,会报错ReferenceError
// var 的情况 console.log(foo); // 输出undefined var foo = 2; // let 的情况 console.log(bar); // 报错ReferenceError let bar = 2;
-
let 不允许重复声明
// 报错 function () { let a = 10; var a = 1; } // 报错 function () { let a = 10; let a = 1; }
不能在函数内部重新声明参数
function func(arg) {
let arg; // 报错
}
function func(arg) {
{
let arg; // 不报错
}
}
const 命令
- 一旦声明,常量的值就不改变,只在声明所在的块级作用域有效。
- const 命令声明的常量也是不提升,同样存在暂时性死区。
- 本质: const 实际上保证的,不是变量的值不能改动,而是变量指向的那个内存地址不得改动。对于简单的数据(数值、字符串、布尔值),值就保存在变量指向的那个内存地址,因此等同于常量。但对于复合类型(引用类型)的数据(主要是对象和数组),变量指向的内存地址,保存的只是一个指针, const 只能保证这个指针是固定的,至于它指向的数据结构是不是可变的,不能控制。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。