为什么 Arguments.callee.caller 属性在 JavaScript 中被弃用
在 JavaScript 中,arguments.callee.caller 被引入,后来被弃用。然而,一些浏览器仍然支持它,而另一些浏览器则完全省略了它。问题出现了:为什么这个看似有用的功能被放弃了?
递归的需要
在 JavaScript 的早期版本中,不支持命名函数表达式。这使得创建递归函数表达式变得具有挑战性。
例如,考虑阶乘函数:
[1,2,3,4,5].map(factorial);
如果没有命名函数表达式,此代码将无法工作。 argument.callee 属性提供了一个解决方案:
[1,2,3,4,5].map(function(n) { return (!(n>1))? 1 : arguments.callee(n-1)*n; });
Arguments.callee
Arguments.callee 的缺点
它在递归调用期间改变了 this 的值。
ECMAScript 3 的解决方案
ECMAScript 3 引入了命名函数表达式,消除了对arguments.callee的需要。[1,2,3,4,5].map(function factorial(n) { return (!(n>1))? 1 : factorial(n-1)*n; });
例如:
它通过消除访问arguments对象的开销来提高性能。
结论
弃用arguments.callee.caller对于提高JavaScript的性能至关重要优化功能并确保函数调用期间行为一致。命名函数表达式为递归和访问调用上下文提供了更可靠、更高效的替代方案。以上是为什么 JavaScript 中不推荐使用'arguments.callee.caller”?的详细内容。更多信息请关注PHP中文网其他相关文章!