1、LET CONST 块级作用域:
Let 只是作用于代码块内部,
死区:变量x
使用let
命令声明,所以在声明之前,都属于x
的“死区”,只要用到该变量就会报错。
不可重复声明:let
不允许在相同作用域内,重复声明同一个变量
const
声明一个只读的常量。一旦声明,常量的值就不能改变
const 只是指向一个地址,这个地址不变就OK,如果用它声明一个对象的时候,对象的属性变化不会报错,因此要谨慎使用。
如果真的想将对象冻结,应该使用Object.freeze
方法。
const foo = Object.freeze({});
// 常规模式时,下面一行不起作用;
// 严格模式时,该行会报错
foo.prop = 123;
var
命令和function
命令声明的全局变量,依旧是顶层对象的属性;另一方面规定,let
命令、const
命令、class
命令声明的全局变量,不属于顶层对象的属性
var a = 1;
// 如果在 Node 的 REPL 环境,可以写成 global.a
// 或者采用通用方法,写成 this.a
window.a // 1
let b = 1;
window.b // undefined
// CommonJS 的写法
require('system.global/shim')();
// ES6 模块的写法
import shim from 'system.global/shim'; shim();
上面代码可以保证各种环境里面,global
对象都是存在的。
// CommonJS 的写法
var global = require('system.global')();
// ES6 模块的写法
import getGlobal from 'system.global';
const global = getGlobal();
上面代码将顶层对象放入变量global
。