Применение анонимных функций
Прочитал замечательный цикл статей у Сошникова, Глава5 вызвала вопросы, на которые надеюсь получить ответ здесь.
В каком случае следует применять var foo = function(){...}а в каком function foo(){...}? Зачем "не загрязнять объект переменных" ? Пусть будет грязный :) А если все таки не загрязнять, то стоит ли вообще пользоваться конструкциями function foo(){...} Насколько я понял, то, только функцию, сохраненную по ссылке в переменную, можно сохранить в объекте. Какие же тогда преимущества у так сказать, классического вида объявления? Есть ли какой либо принцип для выбора той или иной формы объявления функций? |
Цитата:
Цитата:
Цитата:
|
Смысл использования
(function(){...}())мне понятен, например так можно выставить флаги при инициализации, ничего при этом "не загрязняя". Но при присвоении анонимной функции переменной, различий между function declaration и function expression я не вижу. Объясните пожалуйста чайнику, неужели это просто code conventions? Ведь должна быть какая то разница, а не просто нравится ненравится? |
Цитата:
alert(x); // ReferenceError var x = function () {} alert(x); // function x() {} function x() {} |
FD создаётся при входе в контекст, FE -- когда до неё выполнение дойдёт.
|
Цитата:
Цитата:
|
Можно немного конкретики?
var logged = false; (function(){ /*тут запрос к серверу */.... logged = !!data; })(); var auth = { loginhandler: function(){ .... logged = true}, logouthandler: function() {... logged = false} } $('#loginbtn').bind('click', auth.loginhandler); $('#logoutbtn').bind('click', auth.logouthandler); чем лучше или хуже var logged = false; (function(){ /*тут запрос к серверу */.... logged = !!data; })(); function loginhandler() { .... logged = true}, function logouthandler() {... logged = false} $('#loginbtn').bind('click', loginhandler); $('#logoutbtn').bind('click', logouthandler); или равнозначно? Может я в дебри лезу, но все же. |
Цитата:
Например, у тебя на сайте есть чат и комментарии. И ним у тебя есть функции для загрузки аяксом контента. И для удобства делаеться так var chat={ load:function(){//загрузка данных для чата } } var comment={ load:function(){//загрузка данных для комментариев } } Тоесть просто для удобства. согласись, вызывать так chat.load(); comment.load(); Удобнее и красивее, чем так loadComments(); loadChat() |
Цитата:
|
а еще typeof у них разные у function foo(){...} это 'function', а у var foo = function(){...} это 'object'
|
Часовой пояс GMT +3, время: 18:53. |