何时创建参数对象?

when is argument object created?

this 博客 post 中,它说参数对象是在创建执行上下文期间创建并赋值的,在执行任何代码之前。 然而,在 Kyle Simpson 的 YDKJS 书中,有一个看起来像这样的例子,

function foo(a) {
  console.log( a ); // 2
}

foo( 2 );

他说将值“2”赋值给参数 'a' 发生在创建执行上下文之后和代码执行期间。
我一直在努力寻找一种情况,使两者都有意义,但它们似乎完全相反。参数对象究竟是什么时候创建的?提前致谢!

在博客的例子中,它指的是 arguments object (mdn link) ,而不是局部变量,其中 a 是一个。

首先参数列表对象是created on the caller side

然后传入EvaluateDirectCall (or any other internal method that ends up calling a function) and then the execution context is created.

之后,当代码计算时 - references to the variables 是从执行上下文中获得的。

以上所有详细信息:FunctionDeclarationInstantiation