您是否在函数表达式中命名了匿名函数?

时间:2011-12-21 05:03:36

标签: javascript firebug anonymous-function

我在这里使用firebug,试图写一篇博文来展示像这些代码一样的东西。

// Unnamed Anonymous Function
var count1 = function () {
  var x = 0, f;
  f = function () {
    x = x + 1;
    return x;
  };
  return f;
};

// Named Anonymous Function
var count2 = function cf() {
  var x = 0, f;
  f = function ff() {
    x = x + 1;
    return x;
  };
  return f;
};

var c = count1();
console.log(count1); // function()
console.log(c); // function()

var d = count2();
console.log(count2); // cf()
console.log(d); // ff()

关键是,firebug将匿名函数记录为function(),甚至您单击它导航到脚本选项卡的链接,但有时位置错误,您的匿名函数不是'那里。

但如果您将其命名为cf()ff(),则可以轻松回忆它的功能。

在此示例中,代码很短,但如果您在大规模应用程序中工作,例如在ASP.net Web窗体脚本资源中,函数命名可能会以某种方式节省您的调试时间吗?

P.S。我更喜欢函数表达而不是函数声明。

1 个答案:

答案 0 :(得分:1)

命名函数表达式非常适合调试,请注意它们可能会导致旧版Internet Explorer出现问题,所以要小心。

This article详细介绍了所有细节,但简短的版本是IE中的NFE最终会被提升,就像它们是函数声明一样,导致你必须以你不应该的方式清理:

  var f = (function(){
    var f, g;
    if (true) {
      f = function g(){};
    }
    else {
      f = function g(){};
    }
    // null `g`, so that it doesn't reference extraneous function any longer
    g = null;
    return f;
  })();