Показать сообщение отдельно
  #44 (permalink)  
Старый 14.01.2012, 14:31
Особый гость
Посмотреть профиль Найти все сообщения от monolithed
 
Регистрация: 02.04.2010
Сообщений: 4,260

Очем вы говорите, какая проверка функции (bar && bar())?
var foo = function() {
    return bar && bar(); //error: Undefined variable: bar
};

// анализ кода приостановлен!
alert(foo());
alert(1);


Вариант лучше, вернется undefined и анализ кода продолжится:
var foo = function() {
    if (typeof bar !== 'undefined') 
        return bar();
};

alert(foo()); //undefined
alert(1); //1


Если уж хотите использовать этот оператор для проверки функции, то только так (вернется булево значение):

var foo = function() {
    return typeof bar !== 'undefined' && bar();
};

alert(foo()); //0
alert(1); //1


Переменная всегда всегда должна быть объявлена или инициализирована:
var i;
alert(i && i);
alert(1);

var i = 0;
alert(i && i);
alert(1);

Иными словами, если переменная не объявлена и используется в к.л. выражении это приводит к ошибке парсинга и дальнейший анализ кода не производится!
Поэтому перед тем как применять оператор && убедитесь, что переменная или функция объявлены и доступны в текущем скопе области видимости.

Последний раз редактировалось monolithed, 14.01.2012 в 14:54.