Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 27.09.2014, 20:34
Интересующийся
Отправить личное сообщение для Petesso Посмотреть профиль Найти все сообщения от Petesso
 
Регистрация: 06.02.2014
Сообщений: 13

Анонимная функция в условии
Не могу понять как работают анонимные функции в условиях.
Вот пример:
var z = true
if(z == true && function() {alert("a");return true})alert("b");

Мне казалось, что логичным было бы сначала вывести "a", а затем "b". Так нет! Он выводит только "b". Если мы поменяем в функции return на false, то ничего не изменится! То есть функция по-любому возвращает true? Что за чертовщина? И в чем я запутался?
Ответить с цитированием
  #2 (permalink)  
Старый 27.09.2014, 20:46
Аватар для Erolast
Профессор
Отправить личное сообщение для Erolast Посмотреть профиль Найти все сообщения от Erolast
 
Регистрация: 24.09.2013
Сообщений: 1,436

Ну так а вызывать функцию кто будет?

И да, отбивай конструкции пробелами. Читать невозможно.
Ответить с цитированием
  #3 (permalink)  
Старый 27.09.2014, 20:55
Интересующийся
Отправить личное сообщение для Petesso Посмотреть профиль Найти все сообщения от Petesso
 
Регистрация: 06.02.2014
Сообщений: 13

Я видимо что-то не понимаю в работе анонимных функций. Как тогда в моем случае вывести "а", а затем "b"?
Ответить с цитированием
  #4 (permalink)  
Старый 27.09.2014, 21:05
Аватар для Аркадий Укупник
Аспирант
Отправить личное сообщение для Аркадий Укупник Посмотреть профиль Найти все сообщения от Аркадий Укупник
 
Регистрация: 06.09.2014
Сообщений: 41

z == true && (function() {alert("a");return true})()
Ответить с цитированием
  #5 (permalink)  
Старый 28.09.2014, 08:34
Аватар для Erolast
Профессор
Отправить личное сообщение для Erolast Посмотреть профиль Найти все сообщения от Erolast
 
Регистрация: 24.09.2013
Сообщений: 1,436

Анонимная функция - это та же функция, только без имени. И ее тоже надо вызывать.
Ответить с цитированием
  #6 (permalink)  
Старый 28.09.2014, 13:21
Аватар для Safort
Профессор
Отправить личное сообщение для Safort Посмотреть профиль Найти все сообщения от Safort
 
Регистрация: 23.12.2013
Сообщений: 1,856

Petesso, чувак, ну тебе же Erolast уже сказал всё. У тебя почти всё правильно, ты определил функцию, но не вызвал её.
Вот, чего тебе не хватает:
if(z == true && function() {alert("a");return true}())alert("b");
Ответить с цитированием
  #7 (permalink)  
Старый 28.09.2014, 16:58
Аватар для Erolast
Профессор
Отправить личное сообщение для Erolast Посмотреть профиль Найти все сообщения от Erolast
 
Регистрация: 24.09.2013
Сообщений: 1,436

Цитата:
Вот, чего тебе не хватает:
if(z == true && function() {alert("a");return true}())alert("b");
А теперь запусти это в консоли.
Ответить с цитированием
  #8 (permalink)  
Старый 28.09.2014, 17:53
Аватар для Safort
Профессор
Отправить личное сообщение для Safort Посмотреть профиль Найти все сообщения от Safort
 
Регистрация: 23.12.2013
Сообщений: 1,856

Erolast,
запустил, всё норм. А что не так?

var z = true;
if(z == true && function() {alert("a");return true}())alert("b");
Ответить с цитированием
  #9 (permalink)  
Старый 28.09.2014, 18:30
Аватар для Erolast
Профессор
Отправить личное сообщение для Erolast Посмотреть профиль Найти все сообщения от Erolast
 
Регистрация: 24.09.2013
Сообщений: 1,436

Хм, и правда, всё норм. Без ифа бы еррор был - анонимную функцию при вызове надо в скобки оборачивать.
Ответить с цитированием
  #10 (permalink)  
Старый 28.09.2014, 21:13
Профессор
Отправить личное сообщение для Sweet Посмотреть профиль Найти все сообщения от Sweet
 
Регистрация: 16.03.2010
Сообщений: 1,618

Сообщение от Erolast
Без ифа бы еррор был - анонимную функцию при вызове надо в скобки оборачивать.
Нужно, чтобы функция была в выражении, она так и называется: Function Expression. Так что вариантов, кроме скобок - много:
!function () { alert(1); } ();

void function () { alert(2); } ();

1, function () { alert(3); } ();
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
не вызывается функция при изменении option soft4you Общие вопросы Javascript 1 23.07.2014 17:41
AJAX функция для новых html-элементов broadcast77 AJAX и COMET 25 03.03.2014 14:01
функция и несуществующий id Ankh Элементы интерфейса 4 10.02.2012 23:49
функция не успевает Sadist_dead Элементы интерфейса 22 02.10.2011 19:00
Где вызывается функция? cradis Общие вопросы Javascript 5 23.04.2011 13:47