在新的ECMA5 Javascript标准中的argument.callee.name替代方案

ffl*_*ing 6 javascript ecmascript-5

我正在努力将一些旧代码移植到'严格模式',在ECMA5标准中,argument.callee和类似的argument.caller等的替代方法是什么?


添加信息:我没有说明为什么我需要argument.caller/callee.

我正在移植的代码正在使用

assert.ok(elemNode, arguments.callee.name + ": Entity - " + entityId + " has been found");
Run Code Online (Sandbox Code Playgroud)

如果它是简单的递归我可以使用函数name(){... function()...},但我似乎无法找到如何处理上面的代码.

Ben*_*ick 7

从ECMAScript 3开始,您可以使用命名函数表达式.在此之前,函数表达式是匿名的,这是arguments.callee必要的.命名函数表达式使其不必要.所以这是推荐的替代方案.

请参阅callee的MDN文档

例:

[1,2,3,4,5].map(function factorial (n) {
    return !(n > 1) ? 1 : factorial(n-1)*n;
});
Run Code Online (Sandbox Code Playgroud)

命名函数的好处(来自MDN文档):

  • 该函数可以像代码中的任何其他函数一样调用
  • 它不会污染命名空间
  • 这个价值不会改变
  • 它的性能更高(访问参数对象很昂贵)


Ali*_*guy 1

您需要为函数命名,然后通过该名称引用该函数。