Вопрос по javascript – Цель «самостоятельного вызова анонимных функций» [дубликат]

7

Possible Duplicate:
What is the purpose of a self executing function in javascript?

Надеюсь, довольно простой вопрос:

Какова цель использования самостоятельного вызова анонимных функций? Это просто для предотвращения "загрязнения" глобальная область с переменными и т. д.? Или есть другие преимущества их использования?

Это также называется IIFE. Увидетьbenalman.com/news/2010/11/…. Mathias Bynens

Ваш Ответ

4   ответа
11

Исходя из моего личного опыта, кроме использования анонимных функций для создания области, я также использовал ее в циклах for для закрытия. Это может быть полезно, когда элемент DOM должен хранить свое количество, а у вас нет доступа к таким библиотекам, как jQuery и т. Д.

Допустим, у вас есть 100DIV элементы. Нажав первыйDIV элемент должен предупредить 1, аналогично щелкнув 56-й элемент div должен предупредить 56.

Поэтому при создании этих элементов вы обычно делаете что-то вроде этого

// Assume myElements is a collection of the aforementioned div elements

for (var i = 0; i < 100; ++i) {
    myElements[i].onclick = function() {
        alert( 'You clicked on: ' + i );
    };
}

Это предупредит 99, поскольку счетчик в настоящее время 99. Значениеi здесь не поддерживается.

Тем не менее, когда анонимная функция используется для решения проблемы,

for (var i = 0; i < 100; ++i) {
    (function(count){
     myElements[count].onclick = function() {
         alert( 'You clicked on: ' + count );
     }; 
    })(i);
}

Здесь значениеi поддерживается и отображается правильный счет.

3

Это создать свою собственную сферу. Это не только лучше, потому что вы больше не «загрязняете» В какой-то другой (глобальной, например) области действия он дает вам гарантированный выход из-за проблем с именами и защиты от программистов, которые любят слишком сильно совать внутренние функции ваших функций / объектов / методов среди всех преимуществ. Это также позволяет GC легко понять, что вам больше не понадобятся объекты, на которые есть ссылки, когда функция будет выполнена.

0

Закрытия в петлях также используйте самостоятельные вызовы анонимных функций.

function attachEventsToListItems( ) {
    var oList = document.getElementById('myList');
    var aListItems = oList.getElementsByTagName('li');
    for(var i = 0; i < aListItems.length; i++) {
        var oListItem = aListItems[i];
        // Watch this:
        oListItem.onclick = (function(value) {
            return function() {
                alert(value);
            }
        })(i);
    }
}
4

Is it simply to prevent "polluting" the global scope with variables etc.?

Довольно много. Инкапсуляция и избегание как можно большего глобального состояния - хорошие цели сами по себе.

Мне кажется, это более понятно.

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