Вы называете свою анонимную функцию в выражении функции? - PullRequest
1 голос
/ 21 декабря 2011

Я использую 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 Form, имя функции может как-то сэкономить ваш день при отладке?

P.S. Я предпочитаю выражение функции, а не объявление функции.

1 Ответ

1 голос
/ 21 декабря 2011

Выражения именованных функций могут быть полезны для отладки, просто имейте в виду, что они могут вызвать проблемы со старыми версиями Internet Explorer, поэтому будьте осторожны.

В этой статье рассматриваются все детали, но короткая версия заключается в том, что NFE в IE могут оказаться поднятыми так, как если бы они были объявлениями функций, поэтому вам придется выполнять очистку так, как вы не должны ' т:

  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;
  })();
...