首页 > 解决方案 > 该函数的参数名称隐藏的函数名称

问题描述

警告:ECMAScript (ES5) 第 5 版禁止在严格模式下使用 arguments.callee()。避免使用 arguments.callee(),方法是给函数表达式命名或在函数必须调用自身的地方使用函数声明。[ MDN ]

在以下情况下如何引用o自身内部的函数?

function o(o) { o(); }
o('not a function'); // TypeError: o is not a function

编辑:

为什么不重命名参数/函数?

  1. 我正在调试数千个混淆的 JavaScript 代码文件。
  2. 我个人的观点是,这个问题应该可以通过单独的反射来避免,而不是重构。

编辑:

在上述情况下,我正在寻找一种在自身内部引用函数的方法,或者寻找对可靠来源的解释或引用,以解释为什么参数名称会隐藏函数名称

标签: javascriptecmascript-6reflectionsyntax

解决方案


将参数命名为另一个声明的变量具有的名称使其成为函数中的值。它忽略其他声明并使用参数中的声明。最好的办法是重命名它,但如果它在全局范围内,您可以使用window(仅限 HTML 文档)访问它。只需键入window.functionName(),它将正确引用。var这仅在使用关键字在全局范围内定义时才有效!

//global scope
var a = 1
function b(a) {
  console.log(a)
  console.log(window.a)
}
b(2) //2 and then 1
function o(o) {
  console.log(++a)
  if(a < 5) window.o() //calls o() from global scope
}
o()


推荐阅读