• 深入理解ES6临时死区(Temporal Dead Zone)


    看我能坚持几天吧,我真的太需要一个大大的动力了。开始吧开始吧,废话贼多。

    与var不同,let和const不会被提到作用域顶端,如果在声明之前访问这些变量,即使是相对安全的typeof也会触发错误。

    if( condition ) {
    console.log(typeof value); //引用错误!Uncaught ReferenceError: Cannot access 'value' before initialization
    let value = blue;
    }

    由于console.log(typeof value)抛出错误,因此用let定义并初始化变量value的语句不会执行。此时的value还位于‘临时死区’。虽然ECMAScript标准并没有明确提到TDZ,但人们却常用它来描述let和const的不提升效果。

    JavaScript引擎在扫描代码发现变量声明时,要么将它们提升至作用域顶部(遇到var声明),要么将声明放到TDZ中(遇到let和const声明)。访问临时死区(TDZ)的变量会触发运行时错误。只有执行过变量声明语句后,变量才会从TDZ中移出来,然后就可以访问了。

    在声明前访问由let定义的变量就是这样。即便是相对不易出错的typeof操作符也无法阻挡引擎抛出的错误。但在let声明的作用域外对该变量使用typeof则不会报错

    console.log(typeof value); //undefined
    if( condition ) {

    let value = blue;
    }

    typeof是在声明变量value的代码块外执行的,此时value并不在TDZ中。这也就意味着不存在value这个绑定,typeof操作最终返回"undefined"。TDZ只是块级绑定的特色之一,而在循环中使用块级绑定也是一个特色。

  • 相关阅读:
    RabbitMQ 路由选择 (Routing)
    RabbitMQ 发布/订阅
    RabbitMQ 工作队列
    MySQL中的insert ignore into, replace into等的一些用法总结
    BigDecimal用法详解
    RabbitMQ 入门 Helloworld
    git标签
    git查看提交历史
    RabbitMQ简介
    【计算机视觉】SeetaFace Engine开源C++人脸识别引擎
  • 原文地址:https://www.cnblogs.com/qt0909/p/15645627.html
Copyright © 2020-2023  润新知