2011-12-12 6 views
2

Я хотел бы найти самый простой способ убедиться в области переменных.var keyword и область функции javascript

Проводы на следующем примере (jsfiddle):

var foo = function() { 
    var bar = function() { 
     pub = "public"; 
     var pri = "private"; 

     alert(pub) // public 
     alert(pri) // private 
    }; 

    // alert(pub) // pub not defined 
    bar(); 
    alert(pub) // public 
    // alert(pri) // pri not defined 
}; 

foo(); 
alert(pub) // public 
// alert(pri) // pri not defined 

Могу ли я сказать, что:

1.- Все переменный с префиксом var ключевым словом будет виден внутри его функции и все их вложенной функции?
2.- Все переменные без ключевого слова var будут видны повсюду после того, как (его контейнер функций) будет выполнен?

+0

Это интересный вопрос, но который я бы избегал на практике. Я считаю, что использование переменной var изменяет текущую область видимости. Не используя ее, переменная не будет использовать область (глобальная). –

+2

Не исключайте 'var'. Если вы намереваетесь сделать глобальный, сделайте его явным. Выполнить код в строгом режиме, чтобы убедиться, что вы случайно не сделали неявного глобального. – RightSaidFred

+0

@RightSaidFred +1 для строгого режима. – Domenic

ответ

4
  1. Это верно, если только они не затенены другим внутренним определением той же переменной.
  2. Все переменные без var будут глобальными, если только они уже не определены внешней областью.

Поскольку люди сказали глобалам ...

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

var ns = {}; 
// Now use this anywhere in your code 
ns.myGlobal = 49; 
+5

И стоит добавить: глобальные переменные являются злыми, и объявлять их неявно, опуская «var» - это супер-зло! – Domenic

+0

+1 * Я узнаю о clousures и т. Д., Но я хочу, чтобы оставил ясными некоторые основы' *. Таким образом, мы можем заключить, что ** 1 .- ** Всегда определять переменные с помощью 'var' (очевидно, где должно быть сделано, либо в глобальной, либо в локальной области) ** 2 .- ** Все переменные будут видны в их вложенных областях (начиная с глобального масштаба). –

+0

@ juan-mendes вы можете прокомментировать эту последнюю? ожидая подтверждения этого ответа ... o/\ o –

0

Проверить это для большей ясности ...

var foo = function() { 
    var pri = "OUTER";// this is what I changed... 
    var bar = function() { 
     pub = "public"; 
     var pri = "private"; 

     alert(pub) // public 
     alert(pri) // private 
    }; 

    // alert(pub) // pub not defined 
    bar(); 
    alert(pub) // public 
    alert(pri) // pri not defined 
}; 

foo(); 
alert(pub) // public 
alert(pri) // pri not defined 
+0

Вы правы jsobo, но это не ответ. THX в любом случае ... :) –

+0

Я не ожидал получить кредит, но вставка кода в комментарии не работает так хорошо ... и предыдущий ответ был хорошим ... извините, что загромождал ваш вопрос ... Я просто подумал, что пример кода интересен –

1

Да. Вы поняли это правильно.

Подумайте о любой переменной с ключевым словом "var" перед ней как видимой для этой функции и ее вложенными функциями. Подумайте о любой переменной без ключевого слова «var» перед ней как window.variable.

var foo = function() { 
    var bar = function() { 
     pub = "public"; 
     var pri = "private"; 

     alert(pub) // public 
     alert(pri) // private 
    }; 

    // alert(pub) // pub not defined 
    bar(); 
    alert(pub) // public 
    alert(pri) // pri not defined 
}; 

foo(); 
alert(pub) // public 
alert(pri) // pri not defined 

Как правило, вы не должны использовать глобальные переменные.

+0

Отличная точка.Я не должен считать, что этот глобальный объект является «окном». –

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