【问题标题】:ES5 "strict" and arguments.callee [duplicate]ES5“严格”和arguments.callee [重复]
【发布时间】:2012-08-31 14:59:06
【问题描述】:

可能重复:
Why was the arguments.callee.caller property deprecated in JavaScript?

在 ES5 严格模式下(即"use strict"),引用当前函数的arguments.callee 变量不再可用。

对于递归函数,使用函数自己的名称显然是明智的。但是有时我可能想使用arguments.callee 的属性(即.length.prototype)而不必使用当前函数的名称。

谁能解释(据称)通过删除它解决了什么明显的问题?

【问题讨论】:

  • 不好的做法,差不多。 arguments.callee 的所有情况要么可以用更优雅的方式解决,要么不应该解决。
  • 至于边缘情况:这就是我不再使用严格模式的部分原因......:P
  • @close voters - 这个问题是关于arguments.callee 的特定子属性。
  • @Alnitak:“意外”的答案在很大程度上是关于.callee

标签: javascript ecmascript-5


【解决方案1】:

来自here

arguments.callee 严重阻碍了内联等优化 功能,因为它必须能够提供参考 如果 arguments.callee 被访问,则为非内联函数。

【讨论】:

  • 你知道为什么在命名函数的情况下不需要引用吗?
  • @pimvdb 因为函数名总是在函数本身的本地范围内可用。
  • 我和@pimvdb 一样好奇;但我不明白你是如何回答他的问题的。如果您可以通过return <name> 提供对该函数的非内联版本的引用,那么这与通过return arguments.callee 这样做没有什么不同。是吗?如果有,怎么做?
猜你喜欢
  • 2012-04-18
  • 2011-09-22
  • 2014-08-12
  • 1970-01-01
  • 2013-11-23
  • 2013-01-31
  • 2019-04-28
  • 2015-02-06
  • 1970-01-01
相关资源
最近更新 更多