13
(function(a){
    alert(a);
}(1));


(function (a) {
    alert(a);
})(1);

В чем отличие этих функций?

Или вот из примера Стефанова:

var result = (function () {
 return 2 + 2;
}());

(function () {
 alert(‘watch out!’);
})();
ruslik
  • 533
  • Найдите дубликат, кто-нибудь! – VladD Jul 14 '16 at 15:51
  • 8
    Что вы набросились? Человек дело спрашивает. –  Jul 14 '16 at 23:49
  • Doofy, посмотри внимательно на мой вопрос и на те дубликаты , которые ты дал, я не спрашивал что значит эта конструкция, я спросил в чем отличие разных вариантов записи – ruslik Jul 19 '16 at 07:32

2 Answers2

22

Разницы, в общем-то, нет.
Дуглас Крокфорд посчитал что запись:

(function () {
    //body
}());

Является правильной, а нотацию:

(function () {
    //body
})();

Неправильной и пренебрежительно называет её "собачьи яйца" (dog balls).


Поэтому используйте ту, что больше нравится (я, к примеру, согласен с Дугласом, хотя второй вариант ничуть не раздражает).
Например в Perl вообще слоганом предписано что всё должно иметь несколько путей нотации.
Чем JS хуже? :)

  • http://largescalejs.ru/module-pattern/ - кстати вот тут автор тоже в примере с jquery реализует вариант Дугласа Крокфорда – ruslik Jul 19 '16 at 07:54
  • @ruslik, Дуглас - уважаемый чувак, его мнение имеет вес. Плюс, на мой взгляд, конструкцию }()); проще набирать, чем })();. –  Jul 19 '16 at 12:40
  • Первый вариант не работает со стралочными функциями – Gelloiss Dec 12 '22 at 15:00
1

Исправленный код

for (var i = 0; i < 4; i++) {
(function(i) {setTimeout(() => console.log(i), 100)}(i))
}

Не работает

((i)=>setTimeout(() => console.log(i), 100)(i))

Работает

((i)=>setTimeout(() => console.log(i), 100))(i)
  • 1
    Вы на русском stackoverflow, а значит, ответы можно и нужно писать на русском – trollingchar Aug 02 '19 at 08:26