我刚读过以下句子:
每次调用JavaScript函数时,都会创建一个新对象,其中包含有关传递了哪些参数,如何调用函数,调用函数的位置等信息。
这是对的吗? 如果是这样,给定下面的代码,我如何查看这个"新对象"?
function test(){
console.log("hello");
}
test();
答案 0 :(得分:6)
这是对的吗?
理论上,是的 - 实际上,根据规范,有三个对象被创建:声明性环境记录,词汇环境 object和arguments
伪数组。大多数人将前两个以“执行上下文”的名义混为一谈。这在§10.4.3 of the spec及其链接的部分中有详细说明。 lexical enviroment 对象具有任何声明的参数,局部变量,arguments
伪数组等的属性。(我稍微简化了一下。)这就是闭包(函数“关闭“上下文”工作:它们引用了创建它们的上下文。 (更多关于我的博客:Closures are not complicated。)
我说理论因为当然只要优化的副作用不可观察,JavaScript引擎就可以自由优化。您的test
函数没有任何声明的参数,不使用arguments
伪数组,不创建任何闭包,并且不会通过其名称引用自身,因此引擎可以随意为它创建一个上下文。
如何查看这个“新对象”?
您不能直接提及代码可用的引用。我经常希望有。 : - )