摘要: 我们说过,作用域是根据名称查找变量的一套规则。实际情况中,通常需要同时顾及几个作用域。当一个块或函数嵌套在另一个块或函数中时,就发生了作用域的嵌套。因此,在当前作用域中无法找到某个变量时,引擎就会在外层嵌套的作用域中继续查找,直到找到该变量,或抵达最外层的作用域(也就是全局作用域)为止。考虑以下代码 阅读全文
posted @ 2018-03-30 11:37 开始战斗 阅读(206) 评论(0) 推荐(0) 编辑
摘要: 让我们把上面这段代码的处理过程想象成一段对话,这段对话可能是下面这样的。引擎:我说作用域,我需要为 foo 进行RHS引用。你见过它吗?作用域:别说,我还真见过,编译器那小子刚刚声明了它。它是一个函数,给你。引擎:哥们太够意思了!好吧,我来执行一下 foo 。引擎:作用域,还有个事儿。我需要为 a 阅读全文
posted @ 2018-03-30 11:25 开始战斗 阅读(141) 评论(0) 推荐(0) 编辑
摘要: 为了进一步理解,我们需要多介绍一点编译器的术语。编译器在编译过程的第二步中生成了代码,引擎执行它时,会通过查找变量 a 来判断它是否已声明过。查找的过程由作用域进行协助,但是引擎执行怎样的查找,会影响最终的查找结果。在我们的例子中,引擎会为变量 a 进行 LHS 查询。另外一个查找的类型叫作 RHS 阅读全文
posted @ 2018-03-30 11:21 开始战斗 阅读(479) 评论(0) 推荐(0) 编辑
摘要: 尽管通常将 JavaScript 归类为“动态”或“解释执行”语言,但事实上它是一门编译语言。这个事实对你来说可能显而易见,也可能你闻所未闻,取决于你接触过多少编程语言,具有多少经验。但与传统的编译语言不同,它不是提前编译的,编译结果也不能在分布式系统中进行移植。尽管如此,JavaScript 引擎 阅读全文
posted @ 2018-03-30 10:10 开始战斗 阅读(510) 评论(0) 推荐(0) 编辑