2014-10-09 5 views
0

Я пытаюсь понять область видимости в JS.Here У меня есть пример, который имеет переменную в глобальной области действия, которая называется check. У нее есть правдивое значение, которое я имею в виду 1. внутри функция называется main которой doesn't have a variable called check но имеет if statement, который проверяет, существует ли переменная проверка или нет, на которой она переназначить другое значение, чтобы проверить variable.Then печатает его out.if я используюПочему оператор if не ищет переменную в глобальной области?

if(check){} 

печатает неопределенными , Вот у меня есть некоторые вопросы:

1. переменная проверка объявленные в глобальном scope.It означает, что он имеет everywhere.Then доступа, даже если IF statement не удается, то необходимо напечатать глобально присвоенное значение, которое 1 вместо неопределенного .Почему он печатает undefined вместо 1 ??

2. Основная область действия функции не имеет переменной проверки. Если в случае обнаружения не удается найти проверку внутри области основной функции, почему она не ищет ее в глобальной области?

(function(){ 
 
     var check=1; 
 
     function main(){ 
 
\t \t  if(check){ 
 
       var check=10; 
 
\t   } 
 
\t \t \t document.write(check); 
 
\t \t \t } 
 
\t \t main(); 
 
    })();

+2

Потому что он обнаружил переменную 'check', прежде чем достигнет глобальной области. –

+0

он не нашел check.it, печать не определена. –

+0

Вы установили его равным неопределенному, когда вы выполнили 'var check = 10'. :) Я уверен, что ответ объяснит это в ближайшее время. это очень распространенная проблема. –

ответ

4

JavaScript имеет только функцию сферы и то, что называется подъемное. Каждое объявление переменной внутри функции помещается в начало функции. Таким образом, ваш код эквивалентен

var check=1; 
function main(){ 
    var check; // = undefined 
    if(check){ // block doesn't create scope 
    check=10; 
    } 
    document.write(check); 
} 

локальная переменная check тени внешняя переменная check.

+0

И, чтобы исправить это, просто удалите 'var' перед' var check = 10; ' –

+0

okey во-первых, у меня не было переменной проверки внутри main.If check равно undefined, и если оператор обнаруживает проверку внутри области main.Then, это должно изменить значение на 10. Поэтому почему оно еще не определено? –

+1

'check' не определено, если выполнено условие if, поэтому условие if не работает. –

1

JavaScript будет искать цепочку для самой локальной переменной, которую он может найти. В основном локальная область превосходит глобальную сферу.

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

+0

Сфера не является ловушкой, это по дизайну. Если бы нам удалось получить доступ к переменным, объявленным в области локальной функции плюс параметры, входящие в функцию, библиотеки, такие как jQuery, не могли существовать. – user2867288

+0

Я не хочу сказать, что нет никаких исключений, а скорее, что его следует использовать экономно. – TGH

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

  • Нет связанных вопросов^_^