Тема: Що воно за конструкція: (function() {})();
Хто шарить в JS, не підкажете чим є конструкція типу:
(function() {
  // Певний код
})();Я навіть можу не сформулювати питання для гугла, бо не знаю як воно називається.
Ви не увійшли. Будь ласка, увійдіть або зареєструйтесь.
Ласкаво просимо вас на україномовний форум з програмування, веб-дизайну, SEO та всього пов'язаного з інтернетом та комп'ютерами.
Будемо вдячні, якщо ви поділитись посиланням на Replace.org.ua на інших ресурсах.
Для того щоб створювати теми та надсилати повідомлення вам потрібно Зареєструватись.
Український форум програмістів → JavaScript, TypeScript, ECMAScript → Що воно за конструкція: (function() {})();
Сторінки 1
Для відправлення відповіді ви повинні увійти або зареєструватися
Хто шарить в JS, не підкажете чим є конструкція типу:
(function() {
  // Певний код
})();Я навіть можу не сформулювати питання для гугла, бо не знаю як воно називається.
Функція викликає сама себе.
Просто виклик цієї функції.
Тобто це теж саме, що написати
var fun = function() {
  // Певний код
};
fun();?
Прикольно, дякую!
Тоді ще одне питання в догін. А чому б не написати просто:
// Певний код
Теж хотів це питання задати.
ktretyak написав:Тоді ще одне питання в догін. А чому б не написати просто:
// Певний кодТеж хотів це питання задати.
Щоб об'єктів зайвих не створювати. Попрацювало - хай прибере за собою.
Ага, я ще й бачу, що в межах такої конструкції можна оголошувати функції, які ззовні не будуть доступні.
Це мабуть якраз те, про що ви говорите, koala.
Отакої. 
В своїй роботі я часто зустрічаю штуки типу
do
    local function on_some_action()
        --певний код
    end
    registerSomeAction(on_some_action)
endЯ не розумів, нащо там do...end, тому писав без них. Працює? Працює. Але іноді доводилось придумувати нестандартні імена замість on_some_action. А зараз прийшло розуміння, що їх можна просто взяти і заховати в do ... end, оскільки вони більш ніде не потрібні.
Колись їхав з в поїзді з одним фронт-ендом, він показував код з яким працює, то там все обгорнуте в такі конструкції
Я так зрозумів що то для того щоб не засмічувати глобальну область видимості.
От так завжди, зайдеш в якусь тему, а там вже все повідповідали.
Можна ще такий трюк робити
var test = (function(nick) {
  return 'My nick ' + nick;
})('VTrim');
alert(test);Приклад з живого коду (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));Сторінки 1
Для відправлення відповіді ви повинні увійти або зареєструватися