Анонимная функция – необузданная мощь JavaScript!
Дарова!
Сначала немного теории с wiki:
В JavaScript анонимная функция выглядит так
// Код
};
// Пример
function( x, y ){
return x+y;
};
В чём отличие от не анонимной функции?
Ведь в JavaScript все переменные – это ссылки на объекты. А анонимная функция – это такой же простой объект, как и строка! Не понятно? Тогда смотрите следующий код с пояснениями!
// Но к ней нельзя обратиться, и как следствие,
// её нельзя запустить где-либо кроме как в месте объявления
function(a){return '';};
function printAgent(){
alert( "Ваш userAgent:\n" + navigator.userAgent );
};
// Запускаем её
printAgent();
// Передеча ссылки на анонимную функцию переменной
var pAgent = function(){
alert( "Ваш старый userAgent:\n" + navigator.userAgent );
};
// Запускаем её
pAgent();
Как видите, результат одинаковый.
Надеюсь, сейчас вы уже что-то поняли про нашу сегодняшнюю тему разговора ![]()
Как вы знаете, функции можно запускать(как в предыдущем листинге) и получать результат их работы. Например:
return a * a;
};
var res = calc( 9 );
alert( res );
Если можно запускать именованные функнции, значит можно запускать и анонимные функции. По логике это будет так:
return a * a;
}( 12 );
alert( res );
Работает! Только для запуска таких анонимных функций существует более валидная конструкция, которая запаковывает её в скобки, а именно:
return a * a;
})( 14 );
alert( res );
Кстати, внутри такой функции(да и в любой другой) обраузется замечательная штука – новая область определения переменных!
Если мы пишем вот такой код:
var newVar = 5;
alert( newVar ); // 5
alert( window.newVar ); // 5
</script>
Здесь наша область определения переменных – window. Всё, что назначается здесь – становится свойствами объекта window. Это не есть хорошо, нам незачем захламлять новыми свойствами такой хороший объект!
Для нашего кода будем использовать анонимную область определения переменных – внутри анонимной функции.
var h = 158;
// Килограммы кода
})();
alert( window.h ); // Нема :P
Мы добились того, чего хотели!
Лично от себя бы хотел порекомендовать вам использовать такую конструкцию для своего кода:
// Код
})();
Либо скачать новый нормальный браузер
Комментарии(4)
Не знаю, что именно здесь автор пытался сказать, но звучит как утверждение, что все переменные имеют ссылочный тип, это не так.
как-то противоречиво, сначала утверждение, что ее нельзя запустить, но чуть ниже она запускается:
Но всё - таки это пояснение
отностится к этой строчке кода:
Одной простой строчки кода без каких - либо добавлений и исправлений, при запуске которой в её первозданном виде образуется ошибка.
Очень признателен за помощь!