zoukankan      html  css  js  c++  java
  • 暂时性死区、变量提升的好坏

    一、暂时性死区

    暂时性死区也叫临时性死区(Temporal Dead Zone),TDZ。let、const声明的变量不会进行变量的提升,如果在声明前访问就会报错:

    console.log(userName ) //报错ReferenceError: userName is not defined
    
    let userName = 'Sofia';

    之所以报错,就是因为userName这个变量此时还存在与暂时性死区里面。

    二、变量提升的好坏

    好处:

    1、提高性能

    在预编译阶段,会统计声明的变量、函数,分配空间。

    2、增强容错性

    在很久很久以前,js只是用来发送表单,那时候还没调试工具,也没eslint等代码检查工具,所以需要一定的容错性。

    坏处:

    我们先看一段代码:

           function foo() {
                console.log(userName) // undefined
                if (false) {
                    var userName = 'Sofia';
                    return userName
                } else {
                    return userName
                }
            }
    
            var value =  foo();
            console.log(value) //undefined

    神奇吧!在false的情况下,变量userName被创建啦~

    就是因为存在变量的提升,变量userName被提升到了函数顶部:

          function foo() {
                var userName;
                console.log(userName)
                if (false) {
                    userName = 'Sofia';
                    return userName
                } else {
                    return userName
                }
            }

    看着情况难受吧,难受就别用var了,拥抱let、const吧!它们更普适性,没有变量的提升。

    说到let、const,不说说它们和var的区别都感觉过不去:

    1、不存在变量的提升

    2、暂时性死区

    3、不可重复声明

    4、let、const声明的变量不会被挂载到window下

    5、块级作用域

    问题少年:那let和const的区别呢?

    1、无论是非严格模式下还是严格模式下,都不可以为const声明的常量再赋值。常量,顾名思义,不变的值。

    2、const声明时必须进行初始化赋值。

  • 相关阅读:
    Ember.js 入门指南——计算属性(compute properties)
    Ember.js 入门指南——扩展(reopen)
    Ember.js 入门指南——类的定义、初始化、继承
    Ember.js 入门指南——目录
    Ember.js 入门指南——{{action}} 助手
    ubuntu按转jdk
    ubuntu设置电脑作为wifi热点
    一步完成linux安装jdk
    GStreamer基础教程13
    GStreamer基础教程12
  • 原文地址:https://www.cnblogs.com/caoshufang/p/12961575.html
Copyright © 2011-2022 走看看