Задать вопрос

Что означает контрукция типа “(function(d){ ... })(document)”

Неоднократно встречал подобную контструкцию:

(function (d) {

    // Какой-то код

})(document);


Мне понятно, что данном коде используется замыкание, но не понятно зачем в качестве аргумента замкнутой функции передаёться объект Document.

Вот конкретный пример — маленькая Javascript утилита, которая далает так, чтобы в IE можно было задавать стили HTML5 элементам (таким как section, header, article и прочие; по умолчанию стили для этих элементов в IE будут игнорироваться). В этом скрипте используется следующая конструкция:

(function (p, e) {
    // Какой-то код
})(this, document);


В этом примере помимо аргумента document ещё в добавок передаётся аргумент this, в котором, как я понимаю, хранится объект Window. Кто может мне подсказать зачем замкнутым функциям передавать в качастве аргуметов Document и Window?
  • Вопрос задан
  • 4080 просмотров
Подписаться 4 Оценить Комментировать
Решения вопроса 1
apangin
@apangin
1. Чтобы ограничить область видимости, т.е. избежать глобальных переменных.
2. Чтобы сократить запись обращения к объекту.
3. Как частный случай 1го и 2го, чтоб не допустить конфликта имен. Например, при использовании jQuery часто пишут
    (function($) {
        ...
    })(jQuery);

Благодаря этому в скрипте можно использовать сокращенную запись типа $(xxx), даже если идентификатор $ определен где-то еще, например, в MooTools.

P.S. И это, кстати, не замыкание.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
barmaley_exe
@barmaley_exe
Ну можно сэкономить пару байт.
Ответ написан
kashey
@kashey
Программирую большую половину жизни
По мне так это обычное капсулирование функционала.
А на вход вы можете подать любую переменную, например документ ифрейма а не свой — функции будет как-то фиолетово
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы