Тема: Що воно за конструкція: (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
Для відправлення відповіді ви повинні увійти або зареєструватися