1
let 变量的使用
let 与 var 的区别
var : 变量在没有var之前声明之前就可以使用,不过值是 undefind
let : 变量必须声明之后才可以使用,并且作用域范围在 代码块范围内有效
// var 的情况
console.log(foo); // 输出undefined
var foo = 2;
// let 的情况
console.log(bar); // 报错ReferenceError
let bar = 2;
ES6 规定暂时性死区和let、const语句不出现变量提升,主要是为了减少运行时错误,防止在变量声明前就使用这个变量,从而导致意料之外的行为。
2
暂时性死区
定义: 在一个代码块范围内,使用let命令声明变量之前,该变量都是不可用的。
eg:
var tmp = 123;
if (true) {
tmp = 'abc'; // ReferenceError
let tmp;
}
# ES6 规定暂时性死区和let、const语句不出现变量提升,主要是为了减少运行时错误,防止在变量声明前就使用这个变量,从而导致意料之外的行为。
3
const常量使用
定义: const声明一个只读的常量。一旦声明,常量的值就不能改变。
const PI = 3.1415;
PI // 3.1415
PI = 3;
// 报错
#注意:
1. 一旦定义const 常量 必须初始化赋值
2.const的作用域与let命令相同:只在声明所在的块级作用域内有效。
3.const实际上保证的,并不是变量的值不得改动,而是变量指向的那个内存地址所保存的数据不得改动。
4. const 变量为 复合类型时,变量指向的内存地址,保存的只是一个指向实际数据的指针,可以为符合类型添加属性或者方法,但是不可以改变指针地址引用
const foo = {};
// 为 foo 添加一个属性,可以成功
foo.prop = 123;
foo.prop // 123
// 将 foo 指向另一个对象,就会报错
foo = {}; // TypeError: "foo" is read-only
const a = [];
a.push('Hello'); // 可执行
a.length = 0; // 可执行
a = ['Dave']; // 报错
4
声明变量的6中方法
ES5 中
var function
ES6 中
let const class import
5
顶层对象属性
1.在浏览器环境顶层对象属性指的是window对象,
2.在 Node 指的是global对象。
3.ES5 之中,顶层对象的属性与全局变量是等价的。
window.a = 1;
a // 1
a = 2;
window.a // 2
#注意
4.在ES6中,let命令、const命令、class命令声明的全局变量,不属于顶层对象的属性。
var a = 1;
// 如果在 Node 的 REPL 环境,可以写成 global.a
// 或者采用通用方法,写成 this.a
window.a // 1
let b = 1;
window.b // undefined
5. ES6 这样的设计解决了在编译时就可以找到错误
原创不易,如果觉得不错的话,点个赞哟