Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Анонимная функция в условии (https://javascript.ru/forum/misc/50482-anonimnaya-funkciya-v-uslovii.html)

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

Цитата:

Сообщение от Erolast
Без ифа бы еррор был - анонимную функцию при вызове надо в скобки оборачивать.

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

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

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


Часовой пояс GMT +3, время: 03:06.