2015-06-01 2 views
0

Почему эта линия:Javascript функции и логические операции

true && function() {console.log("aaa");}() 

печать

ааа неопределенная

но эта линия:

true || function() {console.log("aaa")}() 

печать

правда

Мне очень интересно, что происходит? Почему функция выполнена?

+0

Функция выполнена потому, что в конце вашей функции есть скобки. Попробуйте 'true && function() {console.log (" aaa ");}', aaa не отображается. – R3tep

+0

Почему только функция() {console.log ("aaa")}() является синтаксической ошибкой, а добавляет «true &&», исполняемый funciton? – hunter

ответ

2

Введите true && false и результат будет false. Это означает, что он проверяет оба условия и печатает второе условие.

Введите true || false и результатом будет true. Это означает, что как только первое условие оценивается как true, оно не проверяет второе условие и не печатает первое.

Это объясняет, что печатается.

Ваш первый случай:
При входе true && function() {console.log("aaa");}() он оценивает второе условие, а также, и так как ваше второе условие является вызываемая функция [вы используете () в конце], его результат, т.е. «ааа "печатается.
Не используйте () в конце концов то есть ввести true && function() {console.log("aaa");} и результат будет вашим вторым условием function() {console.log("aaa");}

Ваш второй случай:
При вводе true || function() {console.log("aaa")}() ваше первое условие само по себе становится правдой, поэтому не оценивая второе условие , поэтому печатается только истинное значение.

1

Первый из них оценивает оба условия, поскольку второй аргумент (анонимная функция) ... хорошо анонимный, его неопределенный. Оператор || просто оценивается как истина в свой первый аргумент здесь (true), следовательно, он просто печатает true

1

Это потому, что && оператор логично конъюнкция (and). Оба операнда должны быть true для утверждения true.

Между тем || является логической дизъюнкцией (or). Даже если только один операнд true, он будет true.

Когда логический disjunciton (or) находит первый операнд истинным, нет необходимости смотреть дальше, и он может просто вернуть true.

1

Принимая во внимание, что логическая операция & & проверяет наличие двух выражений в true, || оператору просто нужно, чтобы это было правдой. Поэтому в первом случае, поскольку первое выражение оценивается как true, оно проверяет другое выражение (функцию), и поэтому функция запускается. Во втором случае первое выражение оценивается как true, и все, что ему нужно, оно останавливается.

0

В JavaScript && и || операции используются short-circuiting. Он прекращает оценку, как только результат полностью определяется и не оценивает остальное.

Например, изменить свой первый образец:

false && function() {console.log("aaa");}() 
Смежные вопросы