JavaScript 变量提升 作用域

93 阅读1分钟

谈谈对于变量提升以及作用域的理解?

获取有指向的值,对变量有赋值的动作的时候,不管它所在的位置,一定会强制给它赋值

  • 现象

    • 无论在任何位置声明的函数、变量都被提升到模块、函数的顶部
  • JS 实现原理:解析 | 执行 qaq

    • 解析:检查语法、预编译,代码中即将执行的变量和函数声明调整到全局顶部,并且赋值为 undefined,上下文、arguments、函数参数

    • 全局上下文:变量定义,函数声明

    • 函数上下文:变量定义,函数声明,this, arguments

    • 再去执行阶段,按照代码顺序从上而下逐行运行

变量提升存在意义?qaq

  • 提高性能 解析引用提升了性能,不需要执行到时重新解析

  • 更加灵活,补充定义这样一种玩法

  • 指出特殊 case

  • let const 取消了变量提升机制的玩法