你不知道的JavaScript-作用域是什么

Posted kjcy8

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了你不知道的JavaScript-作用域是什么相关的知识,希望对你有一定的参考价值。

作用域是一套规则,用于确定在何处以及如何查找变量、函数等(标识符)。如果查找的目的是对变量进行赋值,那么就会使用 LHS 查询;如果目的是获取变量的值,就会使用 RHS 查询。


赋值操作符会导致 LHS 查询。 = 操作符或调用函数时传入参数的操作都会导致关联作用域的赋值操作。


javascript 引擎首先会在代码执行前对其进行编译,在这个过程中,像 var a = 2 这样的声明会被分解成两个独立的步骤:

  1. 首先, var a 在其作用域中声明新变量。这会在最开始的阶段,也就是代码执行前进行。
  2. 接下来, a = 2 会查询(LHS 查询)变量 a 并对其进行赋值。


LHS 和 RHS 查询都会在当前执行作用域中开始,如果有需要(也就是说它们没有找到所需的标识符),就会向上级作用域继续查找目标标识符,这样每次上升一级作用域(一层楼),最后抵达全局作用域(顶层),无论找到或没找到都将停止。


不成功的 RHS 引用会导致抛出 ReferenceError 异常。不成功的 LHS 引用会导致自动隐式地创建一个全局变量(非严格模式下),该变量使用 LHS 引用的目标作为标识符,或者抛出 ReferenceError 异常(严格模式下)。

 

以上是关于你不知道的JavaScript-作用域是什么的主要内容,如果未能解决你的问题,请参考以下文章

你不知道的javascript--上卷--读书笔记1

《你不知道的javascript》——词法/函数/块作用域

你不知道的JavaScript(上卷)

你不知道的JavaScript(作用域和闭包)

你不知道的JS系列 ( 7 ) - 欺骗词法作用域

JavaScript之静态作用域与动态作用域 #yyds干货盘点#