Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 29.06.2010, 07:35
Новичок на форуме
Отправить личное сообщение для Бормртун Посмотреть профиль Найти все сообщения от Бормртун
 
Регистрация: 29.06.2010
Сообщений: 3

Применение анонимных функций
Прочитал замечательный цикл статей у Сошникова, Глава5 вызвала вопросы, на которые надеюсь получить ответ здесь.
В каком случае следует применять
var foo = function(){...}
а в каком
function foo(){...}
?
Зачем "не загрязнять объект переменных" ? Пусть будет грязный А если все таки не загрязнять, то стоит ли вообще пользоваться конструкциями
function foo(){...}

Насколько я понял, то, только функцию, сохраненную по ссылке в переменную, можно сохранить в объекте. Какие же тогда преимущества у так сказать, классического вида объявления? Есть ли какой либо принцип для выбора той или иной формы объявления функций?
Ответить с цитированием
  #2 (permalink)  
Старый 29.06.2010, 08:26
Аватар для B~Vladi
Модератор Всея Форума
Отправить личное сообщение для B~Vladi Посмотреть профиль Найти все сообщения от B~Vladi
 
Регистрация: 14.05.2009
Сообщений: 4,021

Сообщение от Бормртун
Насколько я понял, то, только функцию, сохраненную по ссылке в переменную, можно сохранить в объекте.
Нет, любую можно сохранить.
Сообщение от Бормртун
В каком случае следует применять
Как тебе больше нравится.
Сообщение от Бормртун
Зачем "не загрязнять объект переменных" ? Пусть будет грязный А если все таки не загрязнять, то стоит ли вообще пользоваться конструкциями
Лучше, если ты сам это поймешь. Все приходит с опытом.
Ответить с цитированием
  #3 (permalink)  
Старый 29.06.2010, 09:16
Новичок на форуме
Отправить личное сообщение для Бормртун Посмотреть профиль Найти все сообщения от Бормртун
 
Регистрация: 29.06.2010
Сообщений: 3

Смысл использования
(function(){...}())
мне понятен, например так можно выставить флаги при инициализации, ничего при этом "не загрязняя". Но при присвоении анонимной функции переменной, различий между function declaration и function expression я не вижу. Объясните пожалуйста чайнику, неужели это просто code conventions? Ведь должна быть какая то разница, а не просто нравится ненравится?
Ответить с цитированием
  #4 (permalink)  
Старый 29.06.2010, 09:22
Профессор
Отправить личное сообщение для exec Посмотреть профиль Найти все сообщения от exec
 
Регистрация: 21.01.2010
Сообщений: 1,022

Цитата:
В каком случае следует применять var foo = function(){...}

а в каком function foo(){...}

?
Функция, объявленная через var foo = function () {}, будет определена только после её объявления, а функция, объявленная через function foo(){}, определена везде.

alert(x); // ReferenceError
var x = function () {}


alert(x); // function x() {}
function x() {}
Ответить с цитированием
  #5 (permalink)  
Старый 29.06.2010, 09:24
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

FD создаётся при входе в контекст, FE -- когда до неё выполнение дойдёт.
Ответить с цитированием
  #6 (permalink)  
Старый 29.06.2010, 09:25
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Сообщение от exec
определена везде.
Не везде, а в скопе.

Сообщение от exec
alert(x); // ReferenceError
var x = function () {}
ReferenceError не будет.
Ответить с цитированием
  #7 (permalink)  
Старый 29.06.2010, 09:38
Новичок на форуме
Отправить личное сообщение для Бормртун Посмотреть профиль Найти все сообщения от Бормртун
 
Регистрация: 29.06.2010
Сообщений: 3

Можно немного конкретики?
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);

или равнозначно? Может я в дебри лезу, но все же.
Ответить с цитированием
  #8 (permalink)  
Старый 01.08.2011, 05:03
Интересующийся
Отправить личное сообщение для pharrell Посмотреть профиль Найти все сообщения от pharrell
 
Регистрация: 27.04.2011
Сообщений: 20

Цитата:
чем лучше или хуже
Это одинаково.Вот пример полезности первого случая.
Например, у тебя на сайте есть чат и комментарии.
И ним у тебя есть функции для загрузки аяксом контента. И для удобства делаеться так

var chat={
load:function(){//загрузка данных для чата
}
}
var comment={
load:function(){//загрузка данных для комментариев
} 
}

Тоесть просто для удобства. согласись, вызывать так
chat.load();
comment.load();

Удобнее и красивее, чем так
loadComments();
loadChat()
Ответить с цитированием
  #9 (permalink)  
Старый 01.08.2011, 12:13
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Сообщение от pharrell
Тоесть просто для удобства. согласись, вызывать так
chat.load();
comment.load();

Удобнее и красивее, чем так
loadComments();
loadChat()
Вот для данного конкретного примера вообще не вижу разницы. Второй вариант даже читается легче: "загрузить каменты", вместо "камент загрузить".
Ответить с цитированием
  #10 (permalink)  
Старый 29.12.2011, 12:33
Новичок на форуме
Отправить личное сообщение для jg_shift Посмотреть профиль Найти все сообщения от jg_shift
 
Регистрация: 29.12.2011
Сообщений: 1

а еще typeof у них разные у function foo(){...} это 'function', а у var foo = function(){...} это 'object'
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Цепочка функций sartas Общие вопросы Javascript 12 18.03.2011 21:33
Применение стиля для родителя при выбраном чекбоксе house.wm jQuery 6 22.04.2010 11:35
конструкции взаимодействия функций Vitalyk Элементы интерфейса 11 25.02.2010 17:58
Объединение подобных функций mrMAG Элементы интерфейса 4 20.02.2010 15:35
Можно ли как для произвольного массива создавать вызовы функций , имеющих на входе kefi Общие вопросы Javascript 3 17.04.2009 16:53