你不知道的JavaScript(上卷)1.3  作用域嵌套_你不知道的JavaScript(上卷)1.3  作用域嵌套试读-查字典图书网
查字典图书网
当前位置: 查字典 > 图书网 > 编程 > 你不知道的JavaScript(上卷) > 1.3  作用域嵌套

你不知道的JavaScript(上卷)——1.3  作用域嵌套

我们说过,作用域是根据名称查找变量的一套规则。实际情况中,通常需要同时顾及几个作用域。 当一个块或函数嵌套在另一个块或函数中时,就发生了作用域的嵌套。因此,在当前作用域中无法找到某个变量时,引擎就会在外层嵌套的作用域中继续查找,直到找到该变量, 或抵达最外层的作用域(也就是全局作用域)为止。 考虑以下代码: function foo(a) { console.log( a + b ); } var b = 2; foo( 2 ); // 4 对b 进行的RHS 引用无法在函数foo 内部完成,但可以在上一级作用域(在这个例子中就是全局作用域)中完成。 因此,回顾一下引擎和作用域之间的对话,会进一步听到: 引擎:foo 的作用域兄弟,你见过b 吗?我需要对它进行RHS 引用。 作用域:听都没听过,走开。 引擎:foo 的上级作用域兄弟,咦?有眼不识泰山,原来你是全局作用域大哥, 太好了。你见过b 吗?我需要对它进行RHS 引用。 作用域:当然了,给你吧。 遍历嵌套作用域链的规则很简单:引擎从当前的执行作用域开始查找变量,如果找不到, 就向上一级继续查找。当抵达最外层的全局作用域时,无论找到还是没找到,查找过程都会停止。 把作用域链比喻成一个建筑 为了将作用域处理的过程可视化,我希望你在脑中想象下面这个高大的建筑: 这个建筑代表程序中的嵌套作用域链。第一层楼代表当前的执行作用域,也就是你所处的位置。建筑的顶层代表全局作用域。 LHS 和RHS 引用都会在当前楼层进行查找,如果没有找到,就会坐电梯前往上一层楼, 如果还是没有找到就继续向上,以此类推。一旦抵达顶层(全局作用域),可能找到了你所需的变量,也可能没找到,但无论如何查找过程都将停止。

展开全文


推荐文章

猜你喜欢

附近的人在看

推荐阅读

拓展阅读

《你不知道的JavaScript(上卷)》其他试读目录

• 1.1  编译原理
• 1.2  理解作用域
• 1.3  作用域嵌套 [当前]
• 1.4  异常
• 1.5  小结
  • 大家都在看
  • 小编推荐
  • 猜你喜欢
  •