1 Востаннє редагувалося ktretyak (07.02.2015 19:15:10)

Тема: Що воно за конструкція: (function() {})();

Хто шарить в JS, не підкажете чим є конструкція типу:

(function() {
  // Певний код
})();

Я навіть можу не сформулювати питання для гугла, бо не знаю як воно називається.

Подякували: koala1

2

Re: Що воно за конструкція: (function() {})();

Просто виклик цієї функції.

Подякували: ktretyak, koala2

3 Востаннє редагувалося Kane (07.02.2015 19:17:43)

Re: Що воно за конструкція: (function() {})();

Функція викликає сама себе.

Подякували: ktretyak1

4 Востаннє редагувалося ktretyak (07.02.2015 19:20:27)

Re: Що воно за конструкція: (function() {})();

0xDADA11C7 написав:

Просто виклик цієї функції.

Тобто це теж саме, що написати

var fun = function() {
  // Певний код
};

fun();

?

Прикольно, дякую!

5

Re: Що воно за конструкція: (function() {})();

Тоді ще одне питання в догін. А чому б не написати просто:

// Певний код
Подякували: quez1

6

Re: Що воно за конструкція: (function() {})();

ktretyak написав:

Тоді ще одне питання в догін. А чому б не написати просто:

// Певний код

Теж хотів це питання задати.

7

Re: Що воно за конструкція: (function() {})();

quez написав:
ktretyak написав:

Тоді ще одне питання в догін. А чому б не написати просто:

// Певний код

Теж хотів це питання задати.

Щоб об'єктів зайвих не створювати. Попрацювало - хай прибере за собою.

Подякували: quez1

8

Re: Що воно за конструкція: (function() {})();

Ага, я ще й бачу, що в межах такої конструкції можна оголошувати функції, які ззовні не будуть доступні.

Це мабуть якраз те, про що ви говорите, koala.

Подякували: koala1

9

Re: Що воно за конструкція: (function() {})();

Отакої.
В своїй роботі я часто зустрічаю штуки типу

do
    local function on_some_action()
        --певний код
    end
    registerSomeAction(on_some_action)
end

Я не розумів, нащо там do...end, тому писав без них. Працює? Працює. Але іноді доводилось придумувати нестандартні імена замість on_some_action. А зараз прийшло розуміння, що їх можна просто взяти і заховати в do ... end, оскільки вони більш ніде не потрібні.

Подякували: Chemist-i1

10 Востаннє редагувалося 0x9111A (07.02.2015 21:08:01)

Re: Що воно за конструкція: (function() {})();

Колись їхав з в поїзді з одним фронт-ендом, він показував код з яким працює, то там все обгорнуте в такі конструкції
Я так зрозумів що то для того щоб не засмічувати глобальну область видимості.

11

Re: Що воно за конструкція: (function() {})();

От так завжди, зайдеш в якусь тему, а там вже все повідповідали.

Подякували: Kane1

12

Re: Що воно за конструкція: (function() {})();

Можна ще такий трюк робити

var test = (function(nick) {
  return 'My nick ' + nick;
})('VTrim');

alert(test);

13 Востаннє редагувалося TwiStar (12.02.2015 17:27:48)

Re: Що воно за конструкція: (function() {})();

Приклад з живого коду (coffeescript):

opts.pageImage = (->
    return album.cover_url for album in data[0].albums when album.cover_url? if data[0].albums?
    '/images/no-cover_51.png'
)()

У javascript такий код перетворюється на таке чудовисько -

opts.pageImage = (function() {
  var album, _i, _len, _ref;
  if (data[0].albums != null) {
    _ref = data[0].albums;
    for (_i = 0, _len = _ref.length; _i < _len; _i++) {
      album = _ref[_i];
      if (album.cover_url != null) {
        return album.cover_url;
      }
    }
  }
  return '/images/no-cover_51.png';
})();

Тобто, ми присвоюємо змінній pageImage значення першого з альбомів, або дефолтний, якщо альбомів не знайдено або дефолтне зображення. Тобто, таку нотацію зручно використовувати коли потрібно присвоїти змінній результат виконання функції, але ця функція більше не потрібна.

Є більш хардкорні методи використання (знову CoffeeScript), наприклад, так реалізують y-комбінатор:

y = (f) -> ((g) -> (x) -> f(g(g))(x))((g) -> (x) -> f(g(g))(x));