ECMAScript 6 —— 知识点(一)

ECMAScript 6 —— 知识点(一)

一、let 命令:

  块级作用域:ES5只有全局作用域和函数作用域,没有块级作用域,ES6 引入块级作用域可以有效解决局部变量覆盖全局变量,局部变量提升引发变量泄露为全局变量等问题。ES6允许块级作用域的任意嵌套,但是外层作用域无法读取内层作用域的值。
  let 命令用于声明只在指定代码块内有效的变量。若在代码块该let声明前使用该变量,则抛出异常(暂时性死区)。
  由于 let 的出现引入了块级作用域,使用 块级作用域可以替代 立即执行函数表达式(IIFE),

{
    b = 123;//ReferenceError: 后面有 let 声明
    c;//underfined 由于后面有var c声明,故c得到变量提升
    let a = 10; //正常
    let b;
    var c;  
    let d = 100;
    var d = 1;//SyntaxError: Identifier 'd' has already been declared
}
a;//ReferenceError: 不是let 代码块中的a,该异常非由 let 声明引发,而是因为没有 var 声明也不是一个表达式,故该变量视为引用异常

  使用do 表达式可以返回块作用域的值

var x = do{
    let i = 1;
    i = i++;
}
二、const 命令

  const 命令用于定义只读常量。const的作用域与let命令相同:只在声明所在的块级作用域内有效。

a;//ReferenceError: a is not defined 与 let 一样存在暂时性死区
const a = 10;
const obj = {};//只指向地址,其成员可变
obj.a = 10;
const freezed = Object.freeze({});//对象冻结
// 常规模式时,下面一行不起作用;
// 严格模式时,该行会报错
freezed.prop = 123;
三、顶层对象

  顶层对象,在浏览器环境指的是window对象,在Node指的是global对象。ES5之中,顶层对象的属性与全局变量是等价的。
  ES6规定 var 命令和 function命令声明的全局变量,依旧是顶层对象的属性;另一方面规定,let命令、const命令、class命令声明的全局变量,不属于顶层对象的属性。

window.a = 1;
a // 1
let b = 1;
window.b // undefined
四、跨模块常量
//constants.js
export const A = 1;
export const B = 2;

猜你喜欢

转载自blog.csdn.net/wuxinwudai/article/details/54906992
今日推荐