首页 > web前端 > js教程 > 正文

为什么 JavaScript 中不推荐使用'arguments.callee.caller”?

DDD
发布: 2024-11-12 10:17:02
原创
512 人浏览过

Why Was `arguments.callee.caller` Deprecated in JavaScript?

为什么 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 的缺点

  • 但是,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.callee有几个优点:
  • 它允许像其他函数一样调用函数。
  • 它不会污染命名空间。
  • 它在递归调用中保持 this 的完整性。

它通过消除访问arguments对象的开销来提高性能。

结论

弃用arguments.callee.caller对于提高JavaScript的性能至关重要优化功能并确保函数调用期间行为一致。命名函数表达式为递归和访问调用上下文提供了更可靠、更高效的替代方案。

以上是为什么 JavaScript 中不推荐使用'arguments.callee.caller”?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板