javascript - ECMAScript 规范 v5 中缺少有关输入在全局作用域中声明的函数时会发生什么的详细信息?

标签 javascript ecmascript-5 ecma262

ECMAScript 规范详细介绍了当控制进入 function within a function 的执行上下文时会发生什么情况。

function foo() {
  function bar() {

  }
  bar(); // Control will be given to the bar function.  Details specified by spec
}

还有一个关于当控制enters global code时会发生什么的解释。 .

<script>
  // Entering global code!  Details specified by spec
</script>

但是,没有任何内容指定输入对全局代码中定义的函数的控制权时会发生什么。

<script>
  function foo() {
  }
  foo(); // Calling a function defined in the global environment...not specified by spec
</script>

编辑:这对我来说很重要,因为我很好奇全局代码调用的函数的内部 [[Scope]] 属性是什么。我假设它将是全局执行上下文的词法环境,但规范中没有指定这一点。

最佳答案

我认为您误解了这句话(来自 §10.4.3, Entering Function Code ):

The following steps are performed when control enters the execution context for function code contained in function object F, a caller provided thisArg, and a caller provided argumentsList […]

并不意味着输入的函数必须包含在F中,而是表示输入的代码包含在函数中>F(您正在调用)。

[[Call]] methodcalling a function 时使用不区分全局/局部声明或调用的函数。

关于javascript - ECMAScript 规范 v5 中缺少有关输入在全局作用域中声明的函数时会发生什么的详细信息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15123595/

相关文章:

javascript - 在 JavaScript 中调用对象后的默认字符串值

javascript - 与 'undefined` 的比较是否仍然进行全局范围查找?

javascript - javascript 中的时间切片是如何发生的?

javascript - Firefox 4 和 IE9 中的 javascript 有什么区别

javascript - 对于快速 Web 动画,Javascript/jQuery 或 CSS3?

javascript - NodeJS 函数没有返回数据

JavaScript 在 Jasmine 测试中失败

javascript - 对象应保持其状态

javascript - 在 JavaScript 中限制对 'style' 属性的访问

javascript - 在 Chrome 中推送和弹出卡住数组不会抛出异常