标签: javascript lexical-scope function-expression
如果我们将javascript引擎的操作划分为编译阶段(设置整个词法范围图)Vs运行阶段(在编译阶段使用词法范围设置执行代码),何时设置函数表达式的范围?是在编译或运行/解释阶段吗?
此外,只要设置了函数表达式的作用域,父作用域将始终是全局作用域吗? (我已经看到了这个发生的代码,只是想确认一下)。
答案 0 :(得分:2)
在创建函数时设置函数的范围(包括函数表达式) - 这发生在运行阶段,而不是解析阶段。
答案 1 :(得分:0)
将范围视为功能层次结构更容易。如果要定义第一个函数a(),它的父作用域将是全局作用域。使用()定义的每个函数都可以访问()范围和全局范围。函数树中的每个后代都可以访问它的父范围,其中根是全局范围
答案 2 :(得分:-1)
实际上发现很少有链接[1]和[2]对此有很好的解释。似乎函数表达式的(RHS)在运行时被解释,而函数定义在编译时在作用域上设置。