Jam*_*ard 2 javascript function
我刚看了下面这句话:
每次调用JavaScript函数时,都会创建一个新对象,其中包含有关传递了哪些参数,如何调用函数,调用函数的位置等信息.
它是否正确?如果是这样,给定下面的代码,我如何查看这个"新对象"?
function test(){
console.log("hello");
}
test();
Run Code Online (Sandbox Code Playgroud)
它是否正确?
从理论上讲,是的 - 实际上,根据规范,有三个对象被创建:声明性环境记录,词汇环境对象和arguments伪数组.大多数人将前两个以"执行上下文"的名义混为一谈.这在规范的§10.4.3及其链接的部分中有详细说明.该词法环境对象具有属性的任何声明的参数,局部变量,在arguments伪阵列等(我已经简化轻微那里.)这是闭包(函数"关闭了"上下文)的工作:他们有一个参考到它们被创建的上下文.(更多关于我的博客:闭包并不复杂.)
我在理论上说,因为只要优化的副作用不可观察,JavaScript引擎当然可以自由优化.您的test函数没有任何声明的参数,不使用arguments伪数组,不创建任何闭包,并且不会通过其名称引用自身,因此引擎可以自由地不创建上下文它一点都没有.
我怎样才能看到这个"新对象"?
你不能直接提及代码可用的引用.我经常希望有.:-)