每次调用Java Script函数时都会创建一个新对象吗?

时间:2015-04-24 10:55:23

标签: javascript function

我刚读过以下句子:

  

每次调用JavaScript函数时,都会创建一个新对象,其中包含有关传递了哪些参数,如何调用函数,调用函数的位置等信息。

这是对的吗? 如果是这样,给定下面的代码,我如何查看这个"新对象"?

function test(){
  console.log("hello");
}
test();

1 个答案:

答案 0 :(得分:6)

  

这是对的吗?

理论上,是的 - 实际上,根据规范,有三个对象被创建:声明性环境记录词汇环境 object和arguments伪数组。大多数人将前两个以“执行上下文”的名义混为一谈。这在§10.4.3 of the spec及其链接的部分中有详细说明。 lexical enviroment 对象具有任何声明的参数,局部变量,arguments伪数组等的属性。(我稍微简化了一下。)这就是闭包(函数“关闭“上下文”工作:它们引用了创建它们的上下文。 (更多关于我的博客:Closures are not complicated。)

我说理论因为当然只要优化的副作用不可观察,JavaScript引擎就可以自由优化。您的test函数没有任何声明的参数,不使用arguments伪数组,不创建任何闭包,并且不会通过其名称引用自身,因此引擎可以随意为它创建一个上下文。

  

如何查看这个“新对象”?

您不能直接提及代码可用的引用。我经常希望有。 : - )

相关问题