什么样的机制允许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
的问题。 最佳答案
如果您想捕获错误并在自己的代码中对其进行计算,这将非常有用,这样您就可以在集成输出上向最终用户说明(或只是调试),或将这些错误发送到服务器以使您知道存在问题您的代码。所有这些caller
和arguments
东西都可以帮助调试堆栈。它还可以帮助记录日志(再次调试内容),打印调用方函数的名称(以及可能的参数)。
或者,您可以编写一个深奥的程序,以某种方式有用地使用此信息(也许在对象函数内部)。
之所以存在的原因是这是语言的一部分(我认为为什么这里不是一个好问题)。
关于javascript - 为什么在JavaScript中可以在调用方中引用参数?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34122440/