0

如果我们将 javascript 引擎的操作分为编译阶段(设置整个词法范围图)与运行阶段(在编译阶段使用词法范围设置执行代码),函数表达式的范围何时设置?是在编译阶段还是运行/解释阶段?

此外,每当设置函数表达式的范围时,父范围将始终是全局范围,对吗?(我看过这个发生的代码,只是想确认一下)。

4

3 回答 3

2

函数的范围(包括函数表达式)是在创建函数时设置的——这发生在运行阶段,而不是解析阶段。

于 2016-03-26T21:40:41.700 回答
0

实际上发现很少有链接[1][2]对此有很好的解释。似乎(RHS)函数表达式是在运行时解释的,而函数定义是在编译时在作用域上设置的。

于 2016-03-26T21:44:16.753 回答
0

将范围视为功能的层次结构更容易。如果你定义你的第一个函数 a(),它的父作用域将是全局作用域。每个用 a() 定义的函数都可以访问 a() 的作用域和全局作用域。函数树中的每个后代都可以访问它的父作用域,根是全局作用域

于 2016-03-26T21:31:37.207 回答