2014-12-24 2 views
2

Пожалуйста, проверьте код в http://jsfiddle.net/4a42n8g8/. он предупреждает «неопределенный». Зачем? У меня есть 2 вопроса в частности.Javascript - вопросы, связанные с несколькими областями

var a = 10; 

function x() { 
a = 20; 
alert(this.a); 
} 

x(); 

1) Не является ли переменная «a» внутри функции x глобальной переменной, так как в ней нет префикса var? Или это с префиксом var или без него, любая переменная внутри функции не является глобальной переменной?

2) Поскольку var a = 10 определен вне функции, не делает ли это глобальной переменной? Или все глобальные переменные НЕ ДОЛЖНЫ иметь префикс var?

+1

попробуйте тот же код в консоли хром, и вы получите правильный ответ! –

+0

для открытия хром-консоли нажмите F12, пока хром открыт, а затем нажмите консоль в опции –

ответ

2

Причина заключается в том, что jsfiddle работает код внутри функции, как следующее:

window.onload=function(){ 
var a = 10; 

function x() { 
    a = 20; 
    alert(this.a); 
} 

x(); 
} 

Таким образом, ваш var a является локальной по отношению к функции onload, но this внутри x указывает на глобальный window объекта

Если вы измените настройки своей скрипки на No wrap - in <head> (или в <body>), она будет работать так, как вы ожидаете. http://jsfiddle.net/mendesjuan/4a42n8g8/1/

Вопрос 1

var a не является глобальным, потому что это в пределах функции, если она была вне каких-либо функций, было бы глобальным.

Вопрос 2

То же, вопрос один, var a фактически определяется в функции.

+0

Итак, если в предыдущем вопросе был задан вопрос, мы ответим на него виртуальным оберткой, верно? –

+0

Sp Если вы можете ответить и подтвердить мои 2 вопроса, спасибо! –

+0

Я не уверен, что вы имеете в виду под своим собеседованием. 'virtual no wrap' не имеет никакого смысла в этом контексте. –

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