2012-05-23 4 views
0

я наткнулся на следующую строку кода в underscore.js источник:var существует или var получает синтаксис значения?

function (obj, iterator, context) { 
    iterator || (iterator = _.identity); 
    ... 
} 

Это синтаксис эквивалентен:

if (!iterator) { 
    iterator = _.identity; 
} 

Существуют ли какие-либо преимущества производительности в использовании прежнего синтаксиса, кроме сокращения заявление в одну строку?

+0

не было бы 'if (! Iterator) {...'? – lukecampbell

+0

Да, вот что я имел в виду. – stinkycheeseman

+0

Возможный дубликат [Использование короткого замыкания && как оператора if?] (Http://stackoverflow.com/questions/5049006/using-s-short-circuiting-as-an-if-statement) – stinkycheeseman

ответ

2

Да, это функционально эквивалентно этому.

Единственное преимущество в том, что вы делаете это так, что ваша проверка занимает две линии меньше.

1

Это эффект boolean short-circuit evaluation. В основном, оценка логического выражения прекращается, как только его результат определяется:

true || func() 

В этом случае, FUNC() никогда не вызывается, потому что все, что она возвращает значение всего выражения равно будет true ,

false && func() 

Кроме того, в этом случае FUNC() также не вызывается вообще, потому что независимо от того, что она возвращает, выражение будет оставаться false.

+0

Ahh благодарит вас за правильная терминология. Оказывается, этот вопрос действительно задавался раньше. – stinkycheeseman

Смежные вопросы