Почему Javascript bookmarklets завернуты в замыкания - PullRequest
2 голосов
/ 16 января 2012

Почему закладки Javascript завернуты в крышки?
Я не думаю, что кто-то поместил бы безымянную функцию туда без причины.

Я прочитал довольно много объяснений о замыканиях, но все еще не чувствую, что понял всю концепцию.

Спасибо, ребята!

Ответы [ 6 ]

2 голосов
/ 16 января 2012

Чтобы не загрязнять глобальную область видимости, выполняя функцию после создания.

(function(){var x=10; })()
alert(window.x) // undefined
1 голос
/ 16 января 2012

Это предотвращает попадание переменных в букмарклет на страницу.

0 голосов
/ 16 января 2012

Две причины:

загрязнение

Первый - для предотвращения глобального загрязнения любой из переменных, необходимых для букмарклета. Использование замыкания означает, что var a не добавит window.a в глобальный контекст. Кроме того, использование именованной функции добавит ее в глобальное пространство имен. function a() {...} добавит window.a.

случайный отдых DOM

Второй - избежать случайного воссоздания DOM путем возврата строки. Любой javascript: URL, по которому возвращается строка, создаст новый DOM, используя содержимое строки в качестве источника.

0 голосов
/ 16 января 2012

Как правило, чтобы не загрязнять глобальное пространство имен, он также известен как шаблон модуля, описанный Беном Черри: http://www.adequatelygood.com/2010/3/JavaScript-Module-Pattern-In-Depth

0 голосов
/ 16 января 2012

Смесь конфликтов области действия и политики возврата.

Ответ zzzzBov в этой теме кратко освещает основные проблемы.

0 голосов
/ 16 января 2012

Потому что люди, которые делают их, являются хорошими гражданами сети :) и не хотят случайно перешагнуть через JavaScript реальной страницы.

...