Вход

Просмотр полной версии : Анонимная функция в условии


Petesso
27.09.2014, 20:34
Не могу понять как работают анонимные функции в условиях.
Вот пример:
var z = true
if(z == true && function() {alert("a");return true})alert("b");
Мне казалось, что логичным было бы сначала вывести "a", а затем "b". Так нет! Он выводит только "b". Если мы поменяем в функции return на false, то ничего не изменится! То есть функция по-любому возвращает true? Что за чертовщина? И в чем я запутался?

Erolast
27.09.2014, 20:46
Ну так а вызывать функцию кто будет?

И да, отбивай конструкции пробелами. Читать невозможно.

Petesso
27.09.2014, 20:55
Я видимо что-то не понимаю в работе анонимных функций. Как тогда в моем случае вывести "а", а затем "b"?

Аркадий Укупник
27.09.2014, 21:05
z == true && (function() {alert("a");return true})()

Erolast
28.09.2014, 08:34
Анонимная функция - это та же функция, только без имени. И ее тоже надо вызывать.

Safort
28.09.2014, 13:21
Petesso, чувак, ну тебе же Erolast уже сказал всё. У тебя почти всё правильно, ты определил функцию, но не вызвал её.
Вот, чего тебе не хватает:
if(z == true && function() {alert("a");return true}())alert("b");

Erolast
28.09.2014, 16:58
Вот, чего тебе не хватает:
if(z == true && function() {alert("a");return true}())alert("b");
А теперь запусти это в консоли.

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

var z = true;
if(z == true && function() {alert("a");return true}())alert("b");

Erolast
28.09.2014, 18:30
Хм, и правда, всё норм. Без ифа бы еррор был - анонимную функцию при вызове надо в скобки оборачивать.

Sweet
28.09.2014, 21:13
Без ифа бы еррор был - анонимную функцию при вызове надо в скобки оборачивать.
Нужно, чтобы функция была в выражении, она так и называется: Function Expression. Так что вариантов, кроме скобок - много:

!function () { alert(1); } ();

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

1, function () { alert(3); } ();