ECMAScript 6学习笔记之----Let和const命令

基本使用

ES6 新增了let命令,用来声明变量。它的用法类似于var,但是所声明的变量,只在let命令所在的代码块内有效。

{
    let a = 10;
    var b = 1;
}

console.log("b = " + b);
//console.log("a = " + a);

暂时性死区

 暂时性死区的本质就是,只要一进入当前作用域,所要使用的变量就已经存在了
,但是不可获取,只有等到声明变量的那一行代码出现,才可以获取和使用该变量。

 如果区块中存在letconst命令,这个区块对这些命令声明的变量,
从一开始就形成了封闭作用域。凡是在声明之前就使用这些变量,就会报错
在代码块内,使用let命令声明变量之前,该变量都是不可用的。这在语法上,称为“暂时性死区。

不存在变量提升

var命令会发生“变量提升”现象,即变量可以在声明之前使用,值为undefined。这种现象多多少少是有些奇怪的,按照一般的逻辑,变量应该在声明语句之后才可以使用。


console.log(foo);
let foo = 2;

console.log(t);
var t=2;

 为了纠正这种现象,let命令改变了语法行为,它所声明的变量一定要在声明后使用,否则报错

块级作用域与函数声明

 ES6 引入了块级作用域,明确允许在块级作用域之中声明函数。ES6 规定,块级作用域之中,函数声明语句的行为类似于let,在块级作用域之外不可引用。

function f1() {
   let n = 5;
   if(true) {
       let n = 10;
       print(n)
   }
   print(n)
}

f1();

-----10
-----5

const

const声明一个只读的常量。一旦声明,常量的值就不能改变。const实际上保证的,并不是变量的值不得改动,而是变量指向的那个内存地址所保存的数据不得改动。

const con = {};

// 为 foo 添加一个属性,可以成功
con.prop = 123;
print(con.prop);

-----123

顶层对象属性

 ES5 的顶层对象,本身也是一个问题,因为它在各种实现里面是不统一的。

  • 浏览器里面,顶层对象是window,但 NodeWeb Worker 没有window
  • 浏览器和 Web Worker 里面,self也指向顶层对象,但是 Node 没有self
  • Node 里面,顶层对象是global,但其他环境都不支持.
     一种获取顶层对象属性的方法:
var getGlobal = function () {
    if (typeof self !== 'undefined') { return self; }
    if (typeof window !== 'undefined') { return window; }
    if (typeof global !== 'undefined') { return global; }
    throw new Error('unable to locate global object');
};
print(getGlobal())

-----[object global]

你可能感兴趣的:(React,ECMAScript,6)