2015-05-25 5 views
-2

При использовании строгого режима при доступе к неопределенным переменным генерируются исключения.javascript "use strict"; область блока не ведет себя правильно

Рассмотрим следующий пример:

"use strict"; 
alert(typeof mistypedVaraible + " one"); 
alert(mistypedVaraible + " two"); 

только первые огни предупреждения, потому что исключение при попытке получить доступ к неопределенной переменной во второй боевой готовности. Таким образом, определить его до второго предупреждения:

"use strict"; 
alert(typeof mistypedVaraible + " one"); 
if(typeof mistypedVaraible == "undefined") { var mistypedVaraible; } 
alert(mistypedVaraible + " two"); 

Оба оповещения пожара, потому что тест на неопределенный заявил переменный.

Но если тест не пройден, и переменная не нужно определять, 2-ые пожары Уведомления в любом случае, как бы «если» блок был выполнен, чтобы определить переменную:

"use strict"; 
alert(typeof mistypedVaraible + " one"); 
if(typeof mistypedVaraible != "undefined") { var mistypedVaraible; } 
alert(mistypedVaraible + " two"); 

Что здесь происходит?

+1

Оба оповещения будут срабатывать в любом случае - нет условия, которое регулирует второе. –

+3

Объявление переменной появляется в обоих, что вы ожидали? –

ответ

2

Переменные объявления поднимаются вверх.

Поэтому примеры стать чем-то вроде

"use strict"; 
var mistypedVaraible; 
alert(typeof mistypedVaraible + " one"); 
if(typeof mistypedVaraible == "undefined") { mistypedVaraible; } 
alert(mistypedVaraible + " two"); 
"use strict"; 
var mistypedVaraible; 
alert(typeof mistypedVaraible + " one"); 
if(typeof mistypedVaraible != "undefined") { mistypedVaraible; } 
alert(mistypedVaraible + " two"); 

Так что, если не имеет значения, является ли истинным или ложным условием, переменная объявлена ​​в любом случае.