2013-12-08 4 views
-1
function x() { 
    if(true) { 
     var y = "hello world"; 
    } 
    alert(y); 
} 
x() 
alert(y) 

Когда я запускаю этот код, он дважды предупреждает «Привет мир».Локальная переменная по-прежнему доступна из функции?

Я прочитал учебники о облаках и их y не должен быть доступен для второго предупреждения.

Почему он доступен? Заранее спасибо!!

+8

Это не так. Вы уверены, что вы также не определяете 'y' вне функции? – Blackhole

+1

Когда я запускаю свой код, я получаю одно предупреждение с миром hello: http://jsfiddle.net/Q9eFU/ Должно быть другое определение y вне области x() –

+0

Я только что попробовал. он показывает только одно предупреждение –

ответ

3

Нет, он не предупреждает дважды. (Я действительно проверял это в IE, Firefox и Chrome, чтобы быть абсолютно уверенным.)

Эта переменная является локальной для этой функции, поэтому попытка ее использования вне функции вызывает опорную ошибку.


Если вы действительно видите, что behavoir, то это потому, что вы уже определили переменную с тем же именем с тем же значением в глобальном масштабе также.

+0

Я уверен, что это не причина, но я использую Fedora, а не окна. – Billie

+0

@ user1798362: Это не должно иметь никакого значения для чего-то, что является настолько фундаментальным для языка Javascript. Есть много различий в browswer, но очень мало в языке Javascript. – Guffa

0

Переменная y не должна быть доступна вне функции. Когда я протестировал его, он был недоступен.

Возможно, у вас может быть переменная y, определенная где-то в глобальной области, и это может быть то, что предупреждается.

Локальные переменные в JavaScript доступны только для локальной области действия, а глобальные переменные (те, которые определены вне функций) доступны повсюду, даже внутри функций.

В вашем случае я подозреваю, что может быть другая переменная «y», определенная где-то в глобальной области.


Также вы уверены, что вы не используете скрипт дважды? В этом случае вы можете получать предупреждение дважды из двух вызовов функции x().

Другая причина заключается в том, что может быть другой скрипт, который вы используете на своей странице, который имеет переменную ay, определенную в ее глобальной области действия, и когда она объединена с этим скриптом, она будет предупреждать переменную y, определенную в глобальной области действия другой скрипт.

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