Обзорная проблема в Javascript - PullRequest
3 голосов
/ 29 ноября 2008

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

Спасибо

Ответы [ 2 ]

8 голосов
/ 29 ноября 2008

Я думаю, вы запутались, потому что 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 голос
/ 30 ноября 2008

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

Прав ли я выше?

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