es6加入了哪些新特性

2021-10-12  本文已影响0人  9月的甜橙子

ES6 引入了 let 和 const 关键字,从而使 JavaScript 也能像其他语言一样拥有了块级作用域。

function letTest() { 
  let x = 1; 
  if (true) { 
    let x = 2; // 不同的变量 
    console.log(x); // 2 
  } 
  console.log(x); // 1
}

JavaScript 引擎是如何同时支持变量提升和块级作用域的?

变量提升是通过变量环境来实现,而块级作用域就是通过词法环境的栈结构来实现的,通过这两者的结合,JavaScript 引擎也就同时支持了变量提升和块级作用域了。

思考题

let myname= '极客时间'
{ 
    console.log(myname) 
    let myname= '极客邦'
}

【最终打印结果】:VM6277:3 Uncaught ReferenceError: Cannot access 'myname' before initialization
【分析原因】:变量会经历创建、初始化、赋值3个过程。在块作用域内,let声明的变量被提升,但变量只是创建被提升,初始化并没有被提升,在初始化之前使用变量,就会形成一个暂时性死区。
【拓展】
var的创建和初始化被提升,赋值不会被提升。
let的创建被提升,初始化和赋值不会被提升。
function的创建、初始化和赋值均会被提升。

补充

在ES3开始,try /catch 分句结构中也具有块作用域。

上一篇下一篇

猜你喜欢

热点阅读