2008-11-29 3 views
3

Мне нужно иметь некоторую информацию о проблеме Scoping в Javascript. Я знаю, что он использует лексическую (статическую) область обзора, но не поддерживает ли она динамическое масштабирование? Если вы знаете что-нибудь о области видимости в Javascript, не могли бы вы поделиться им со мной?Проблема определения в Javascript

Благодаря

ответ

8

Я думаю, что вы смущены, потому что Javascript использует статическую область видимости, но на уровне функций, а не на уровне блоков, как обычных структурированных языков.

var foo = "old"; 
if (true) {var foo = "new";} 
alert (foo == "new") 

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

functions = []; 
for(var i=0; i<10; i++) { 
    (function(){ 
     var local_i = i; 
     functions[local_i] = function() {return local_i;} 
    })(); 
} 
functions[2]() // returns 2 and not 10 
1

Насколько я понял; Javascript имеет два вида переменных, которые являются глобальными и локальными переменными. Но предположим, что у нас есть переменная, называемая x, которая определена как глобальная и определена в статическом родителе области места, где указано x. В этом случае x принимает значение глобальной переменной. Таким образом, глобальная переменная имеет более высокий приоритет, чем локальные. И, когда глобальных переменных нет, x находит декларацию через статическую цепочку, что заставляет меня думать, что Javascirpt является статичным языком.

Есть ли у меня права выше?

+0

Нет ... Читайте http://www.adequatelygood.com/2010/2/JavaScript-Scoping-and-Hoisting – w00t 2012-02-10 09:28:16