Просто, почему некоторые js файлы (такие как Ember или JQuery.js) начинаются с (function() {...})();
?
Почему некоторые js файлы начинаются с (function() {
Ответ 1
Код формы (function() { /* code here */ })()
известен как выражение "Вызываемое мгновенное выражение". Он часто используется для настройки закрытия, поэтому вы можете определять переменные без загрязнения глобальной области. По этой причине вы находите его в Ember, jQuery и почти любом другом "подключаемом модуле". Загрязнение глобальной области обычно плохое, но с плагинами, которые должны работать на всех сайтах, особенно важно убедиться, что он не случайно перезаписывает переменную, которую использует создатель сайта.
Конечно, есть и другие виды использования. Например, его можно использовать для "привязки" итерирующей переменной, например:
for( i=0; i<links.length; i++) {
(function(i) {
links[i].onclick = function() {alert(i);};
})(i);
}
// without the IIFE, all links would alert the value of links.length instead.
Есть также некоторые случаи, когда я иногда использую IIFE, которые, вероятно, будут зависеть от большинства людей, таких как вычисление "точно в срок":
if( (function() {
var party=document.getElementById('party').children, l=party.length, i, r=0;
for( i=0; i<l; i++) if( party[i].children.length > 0) r++;
return r;
})() == 6) {
// your Party is full
}
Выше было бы намного лучше, если бы оно было рассчитано до перехода в оператор if
, поэтому... не делайте так, как я делаю на этом!
Ответ 2
Синтаксис, начинающийся с
(function(){
/* code */
}());
знает как немедленно вызывал анонимную функцию, которая выполняется сразу после последней строки кода. Используется для переменных диапазона других функций.
Подробнее: http://en.wikipedia.org/wiki/Immediately-invoked_function_expression