函数表达式的词法作用域
lexical scopes for function expressions
如果我们将javascript引擎的操作分为编译阶段(在编译阶段设置整个词法范围图)和运行阶段(在汇编阶段使用词法范围设置执行代码),函数表达式的范围是什么时候设置的?它是在编译还是运行/解释阶段?
此外,无论何时设置函数表达式的作用域,父作用域都将始终是全局作用域,对吗?(我看到了这个发生的代码,只是想确认一下)。
函数的范围(包括函数表达式)是在创建函数时设置的,这发生在运行阶段,而不是解析阶段。
将作用域视为函数的层次结构更容易。如果定义第一个函数a(),它的父作用域将是全局作用域。用a()定义的每个函数都可以访问a()的作用域和全局作用域。函数树中的每个子代都可以访问其父作用域,根作用域是全局作用域
事实上,很少有链接[1]和[2]对此有很好的解释。似乎(RHS)的函数表达式是在运行时解释的,而函数定义是在编译时在作用域上设置的。
相关文章:
- 监视函数从服务返回不起作用,但作用域函数起作用
- 将作用域存储在JSON中
- 从控制器继承了隔离的作用域以生成可重用的指令
- 从ng模板访问作用域
- 调用私有作用域
- 对父作用域的指令更新延迟了一步
- 正在$rootScope上达到控制器作用域$在内部控制器上
- JavaScript/循环混淆中的动态作用域与词法作用域
- 函数表达式的词法作用域
- javascript是否实现词法作用域
- javascript函数中的词法作用域,为什么代码返回undefined ?
- javascript函数中的词法作用域
- JavaScript词法作用域和变量的生命周期
- 词法作用域变量在getJSON调用中被覆盖后仍保留其值
- Typescript -词法作用域的问题=>这一点
- 我是否应该保留等于$q.defer()的变量,使其具有词法作用域?
- 全球.Eval不能访问词法作用域中的变量.行为是否符合ECMAScript标准
- 词法作用域概念在JavaScript中的确切含义是什么?
- 在chrome开发工具中调试带有词法作用域(闭包)的angularjs指令时的奇怪行为
- javascript中的词法作用域