【问题标题】:Binding a name for JavaScript function using variable name使用变量名绑定 JavaScript 函数的名称
【发布时间】:2015-02-19 17:14:12
【问题描述】:

我遇到以下问题:

我认为问题很清楚,匿名函数不取其变量的名称。

因此,如何扩展Function Object构造函数,根据受影响的变量为函数命名?

【问题讨论】:

  • 为什么不直接使用function i_am 而不是var i_am = function
  • 我认为这不可能

标签: javascript anonymous-function extends


【解决方案1】:

你可以这样做:

var i_am = function i_am() { return "I Sure Am!"; }

该语法一直是有效的,但过去有some browser quirks about that。如果您担心这些怪癖,您可以随时这样做:

function i_am() {
  return "I Sure Am!";
}

var i_am = i_am;

有点有点可疑,因为本地范围内的“i_am”绑定是从函数中劫持的,但函数保留了名称的internal绑定.

现在,没有办法追溯地给函数一个内部绑定的名称。函数在创建时几乎被冻结(如果您考虑语言语义和优化,那就应该是这样)。

【讨论】:

    【解决方案2】:

    你不能。

    函数的名称在您创建函数时确定。

    如果您使用未命名的函数表达式,则将创建函数(没有名称)并然后分配给变量。

    由于该变量在此之前没有出现在函数附近,因此不能用于确定函数的名称。

    如果您想为使用函数表达式创建的函数命名,请使用命名函数表达式。

    var addFn = function addFn () {};
    

    (警告:旧版本的 Internet Explorer 存在与命名函数表达式相关的内存泄漏和范围相关错误)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-04-27
      • 1970-01-01
      • 2014-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多