2018-03-26 es6学习笔记
1.const实际上保证的,并不是变量的值不得改动,而是变量指向的那个内存地址不得改动。对于简单类型的数据(数值、字符串、布尔值),值就保存在变量指向的那个内存地址,因此等同于常量。但对于复合类型的数据(主要是对象和数组),变量指向的内存地址,保存的只是一个指针,const只能保证这个指针是固定的,至于它指向的数据结构是不是可变的,就完全不能控制了。
2.ES5 只有两种声明变量的方法:var命令和function命令。ES6 除了添加let和const命令,后面章节还会提到,另外两种声明变量的方法:import命令和class命令。所以,ES6 一共有 6 种声明变量的方法。
3.顶层对象,在浏览器环境指的是window对象,在 Node 指的是global对象。ES5 之中,顶层对象的属性与全局变量是等价的。
4.ES6 ,为了保持兼容性,var命令和function命令声明的全局变量,依旧是顶层对象的属性;另一方面规定,let命令、const命令、class命令声明的全局变量,不属于顶层对象的属性。也就是说,从 ES6 开始,全局变量将逐步与顶层对象的属性脱钩。
var a=1;// 如果在 Node 的 REPL 环境,可以写成 global.a// 或者采用通用方法,写成 this.a
window.a // 1
let b=1;
window.b // undefined
5.全局环境中,this会返回顶层对象。但是,Node 模块和 ES6 模块中,this返回的是当前模块
6.下面代码可以保证各种环境里面,global对象都是存在的。
// 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();