深入理解 JavaScript 系列—什么是作用域

几乎所有编程语言最基本的功能之一,简单的说,作用域控制着变量与函数的可见性以及生命周期。那么问题来了:

  1. 变量存储在哪?
  2. 怎么找到变量?
    这些问题就需要一套良好的规则来存储和查找变量,而这种规则被称之为作用域。
    但是,究竟在哪里并且怎么设置这些作用域的规则呢?

我们学习作用域的方式就是将这个过程模拟成几个人物之间的对话。那么,由谁进行这场对话呢?

演员表

  • 引擎

从头到尾负责整个 Javascript 程序的编译及执行过程。

  • 编译器

负责语法分析及代码生成等脏活累活。

  • 作用域

负责收集并维护由所有声明的标识符(变量)组成的一系列查询,并实施一套非常严格的规则,确定当前执行的代码对这些标识符的访问权限。

为了完全理解 javascript 的工作原理,你需要从引擎开始一样思考,从它们的角度提出问题,并从它们的角度回答这些问题。

对话

当你看见 var a = 2;这段程序时,很可能认为这是一句声明,但 javascript 实际上会将其看成两个完全不同的声明:var a 和 a=2,第一个定义声明是在编译阶段进行,第二个是赋值声明,会被留在原地等待执行阶段。编译器处理过程如下
image
总结:变量的复制操作会执行两个动作,首先编译器会在当前作用域种声明一个变量(如果之前没有声明过),然后再运行时引擎会在作用域种查找该变量,如果能够找到就会对它赋值。

深入理解 JavaScript 系列—什么是作用域

http://robin.me/understandJavascript/what-is-scope/

作者

任裕斌 | robin

发布于

2017-09-22

更新于

2015-01-01

许可协议

You need to set install_url to use ShareThis. Please set it in _config.yml.
You forgot to set the business or currency_code for Paypal. Please set it in _config.yml.