什么机制允许JavaScript函数arguments
通过调用函数的名称从调用者引用它为什么它仍然在语言中?
我在V8中查找尾部呼叫优化(或者更确切地说是缺少它)并且发现了这篇文章(https://code.google.com/p/v8/issues/detail?id=457)
Erik Corry的例子如下
function foo(x) { return bar(x + 1); } function bar(x) { return foo.arguments[0]; } foo(1)
起初我认为可能调用一个函数将其arguments
字段设置为某种奇怪的全局副作用,但它似乎只持续调用的持续时间.
function foo(x) { return bar(x+1); } function bar(x) { return foo.arguments[0]; } console.log(foo(1)); // prints '1' console.log(foo.arguments); // prints 'null'
为什么这种行为在语言中?除了向后兼容性之外,它有用吗?
编辑:
我不是要求使用arguments
引用当前函数体中的伪参数数组,例如
function variadic() { for (var i = 0; i < arguments.length; i++) { console.log("%s-th item is %s", i, JSON.stringify(arguments[i])); } } variadic(1, 2, 3, 4, 5, []);
我问的是somefunction.arguments
用来引用arguments
来电者.