javascript - 在不使用其名称/arguments.callee 的情况下引用当前函数

标签 javascript closures

我已经做了相当多的研究,但对于这个看似简单的问题还没有找到任何答案:

我想将一个属性与一个函数相关联(在这个函数中用作静态变量),如下所示:

function foo() {
    if (!foo.counter) {
        foo.counter = 1;
    }
    else {
        foo.counter++
    }
    // rest of the function code goes here...
}

如果我稍后更改函数的名称,我不想在函数定义中更改对它的引用。 那么,有没有办法引用当前正在执行的函数呢? (除了现在已弃用的 arguments.callee 之外)。像 thisFunction 这样的关键字?

如果没有,为什么没有这样的东西?

最佳答案

我不知道 JavaScript 公开了像 thisFunction(除了 arguments.callee)这样的标识符或关键字,但是实现相同效果的一种方法是命名在闭包中运行 foo,并从闭包中返回 foo。这样一来,您始终可以在 foo 中使用名称 foo 来引用自身,无论您的程序将其分配给什么变量:

var fn = (function() {
  function foo() {

     if (!foo.counter) {
        foo.counter = 1;
    }
    else {
        foo.counter++
    }
    // rest of the function code goes here...
  }

  return foo;
})();

关于javascript - 在不使用其名称/arguments.callee 的情况下引用当前函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14059759/

相关文章:

javascript - 关闭所有 css3

javascript - JavaScript addEventListener(); 是否执行减慢程序速度?

C 中的闭包/功能 block

javascript - Div 内的文本字段

javascript - 如何在分页中使用AJAX加载内容?

javascript - 使用闭包在 javascript 中枚举对象属性的静态变量

c# - Closure 的 R 实现不同于其他函数式语言,这使得它表现得像 C# 等命令式语言?

javascript - 无法访问关闭的 jQuery 对象的方法

swift - 无法将类型 '() -> _' 的值转换为指定类型 'Town.Size'

javascript - 将类的静态方法转换为变量 typescript