Javascript 函数表达式的词法作用域

Javascript 函数表达式的词法作用域,javascript,lexical-scope,function-expression,Javascript,Lexical Scope,Function Expression,如果我们将javascript引擎的操作分为编译阶段(设置整个词法范围图)和运行阶段(在编译阶段使用词法范围设置执行代码),那么函数表达式的范围是什么时候设置的?是在编译阶段还是在运行/解释阶段 此外,每当设置函数表达式的作用域时,父作用域始终是全局作用域,对吗?(我看到过这段代码,只是想确认一下)。更容易将作用域视为函数的层次结构。如果要定义第一个函数a(),它的父作用域将是全局作用域。使用()定义的每个函数都可以访问()的作用域和全局作用域。函数树中的每个子代都可以访问其父作用域,根是全局作

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


此外,每当设置函数表达式的作用域时,父作用域始终是全局作用域,对吗?(我看到过这段代码,只是想确认一下)。

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

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

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

实际上找到了一些链接,并对此进行了很好的解释。函数表达式的(RHS)似乎是在运行时解释的,而函数定义是在编译时在作用域上设置的。

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

我认为您可能混淆了一些不同的东西。下面是两篇可能会有所帮助的好文章:,和。请特别注意关于“调用、绑定和应用”的部分,我认为您可能将一些不同的事情混为一谈。下面是两篇可能会有所帮助的好文章:,和。请特别注意关于“调用、绑定和应用”的部分,函数表达式的作用域是在运行阶段设置的(我想这会映射到我的问题中的编译阶段)?如果可能的话,你能给我转发一篇提到这一点的链接/文章吗?考虑到JS是一种具有优化编译器的解释语言,“阶段”无论如何也没有太大意义。只有解析成AST,然后执行。其中包括设置函数和编译函数体。函数表达式的作用域是在运行阶段设置的(我想这会映射到我问题中的编译阶段)?如果可能的话,你能给我转发一篇提到这一点的链接/文章吗?考虑到JS是一种具有优化编译器的解释语言,“阶段”无论如何也没有太大意义。只有解析成AST,然后执行。其中包括设立职能和编制机构。