Просмотр полной версии : Анонимная функция в условии
Не могу понять как работают анонимные функции в условиях.
Вот пример:
var z = true
if(z == true && function() {alert("a");return true})alert("b");
Мне казалось, что логичным было бы сначала вывести "a", а затем "b". Так нет! Он выводит только "b". Если мы поменяем в функции return на false, то ничего не изменится! То есть функция по-любому возвращает true? Что за чертовщина? И в чем я запутался?
Ну так а вызывать функцию кто будет?
И да, отбивай конструкции пробелами. Читать невозможно.
Я видимо что-то не понимаю в работе анонимных функций. Как тогда в моем случае вывести "а", а затем "b"?
Аркадий Укупник
27.09.2014, 21:05
z == true && (function() {alert("a");return true})()
Анонимная функция - это та же функция, только без имени. И ее тоже надо вызывать.
Petesso, чувак, ну тебе же Erolast уже сказал всё. У тебя почти всё правильно, ты определил функцию, но не вызвал её.
Вот, чего тебе не хватает:
if(z == true && function() {alert("a");return true}())alert("b");
Вот, чего тебе не хватает:
if(z == true && function() {alert("a");return true}())alert("b");
А теперь запусти это в консоли.
Erolast,
запустил, всё норм. А что не так?
var z = true;
if(z == true && function() {alert("a");return true}())alert("b");
Хм, и правда, всё норм. Без ифа бы еррор был - анонимную функцию при вызове надо в скобки оборачивать.
Без ифа бы еррор был - анонимную функцию при вызове надо в скобки оборачивать.
Нужно, чтобы функция была в выражении, она так и называется: Function Expression. Так что вариантов, кроме скобок - много:
!function () { alert(1); } ();
void function () { alert(2); } ();
1, function () { alert(3); } ();
vBulletin® v3.6.7, Copyright ©2000-2025, Jelsoft Enterprises Ltd. Перевод: zCarot