2013-03-16 3 views

ответ

3

Да, он назначит a. Подобная вещь, вероятно, даже не была бы оптимизирована на компилированном языке.

Не будет, однако, тратить время на оценку b, однако, поскольку он уже знает результат. Нечто подобное происходит, когда a = a || b запускается:

if a 
    a = a 
else 
    a = b 

EDIT:

Чтобы следить за то, что icktoofay сказал «это не окажет существенного влияния на производительность.», Это просто установив (логическое) переменную, является одной из самых простых операций, которые могут произойти. Это будет иметь мало значения, даже если вы назначаете нечто более значительное, как функция или массив, поскольку оно будет назначать ссылку на элемент, а не создавать его снова.

Это сравнение производительности, которое ничего не делает против присвоения себе (jsPerf link) благодаря @bfavaretto для его настройки.

+1

Это было бы 'else' не' else if' правильно? Если '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' будет ' –

+0

Да, я в основном стараюсь показать, что он пропускает b, если он был оценен. –

+0

Я вижу вашу точку зрения. Я буду принимать ваш ответ через несколько минут, хотя мне бы хотелось увидеть дополнительную информацию по этому вопросу. –

0

a будет правдой, если a или b это правда. Так что да, если вы не добавите еще один код между этими строками, который может повлиять на значение a, нижний оператор всегда будет устанавливать a в true.

+0

Это неверно. Если 'b' является' true', но 'a' - это, например,' 10', то 'a' будет переназначаться на' 10', а не 'true'. –

0

Да - он не будет оптимизирован, потому что JavaScript не оптимизирует. Хотя базовая реализация парсера могла бы, по-видимому, оптимизировать, я очень сомневаюсь, что в этом случае это будет очень специфично для реализации платформы.