在这篇博文中,它说参数对象是在创建执行上下文期间创建并分配其值的,在执行任何代码之前。然而,在 Kyle Simpson 的YDKJS一书中 ,有一个看起来像这样的例子,
function foo(a) {
console.log( a ); // 2
}
foo( 2 );
他说,在创建执行上下文和代码执行期间,将值“2”分配给参数“a”发生。
我一直在试图找到一个两者都有意义但它们似乎完全相反的主张的场景。参数对象是什么时候准确创建的?先感谢您!
在博客的情况下,它引用的是arguments object
(mdn link) ,而不是局部变量,其中 a 是一个。
首先在调用方创建参数列表对象。
然后将其传递给EvaluateDirectCall
(或任何其他最终调用函数的内部方法),然后创建执行上下文。
之后,当代码评估时 - 对变量的引用是从执行上下文中获得的。
所有来自上面的详细信息:FunctionDeclarationInstantiation