JavaScript - Насколько глубоко переменная может сохранить свое значение? - PullRequest
0 голосов
/ 16 февраля 2012

нубский вопрос тут. Пожалуйста, смотрите код ниже. Где я могу прочитать больше об этом? Я имею в виду, this_variable получает 100 . Кажется, что все впоследствии определенные функции могут получить доступ к этой переменной и получить ее значение, но мне интересно, насколько глубоко это работает? Я работаю над расширением Chrome, и эта чертова штука работает только с обратными вызовами; Мне нужно иметь доступ к вещам в рамках довольно глубоко вложенного обратного вызова, и я должен быть уверен, что то, что я пишу, надежно и останется непротиворечивым.

(function(){

    this_variable = 100;

    (function(){
        (function(){
            (function(){
                (function(){
                    (function(){

                        tadaaa = this_variable;
                        console.log(tadaaa); // sais 100                

                    }());
                }());
            }());
        }());
    }());
}());

Ответы [ 5 ]

6 голосов
/ 16 февраля 2012

Нет ограничений. Хотя, если вы вложены достаточно глубоко, чтобы беспокоиться об ограничении, я бы поставил под сомнение общий дизайн.

2 голосов
/ 16 февраля 2012

так глубоко, как вы хотите. Название концепции - замыкания , и оно является наиболее важным понятием при программировании расширенного JavaScript.

2 голосов
/ 16 февраля 2012

Пока переменная находится в области видимости, к ней можно получить доступ (при условии, что она не скрыта). Вы можете вкладывать столько, сколько хотите. См. здесь для определения объема и закрытия от MDN.

1 голос
/ 16 февраля 2012

Насколько вы идете ..

В какой-то момент он может быть медленнее, но все равно должен быть доступен через ваши обратные вызовы.

0 голосов
/ 16 февраля 2012

Javascript использует функцию определения объема. Правило состоит в том, что если в функции верхнего уровня установлена ​​переменная, то все вложенные функции в функции верхнего уровня имеют доступ к этой переменной. Если переменная объявлена ​​во вложенной функции, то функции верхнего уровня не будут иметь доступа к этой переменной.

//Immediately invoked function that scopes jQuery and outside code cannot access
$(function() {
    //top-level function
    function test() {
        var a = true;
        //nested function
        function nestedTesting() {
            //The nested function has access to a
            console.log(a);
            var b = false;
        }
        nestedTesting();
        //The top level function does not have access to b
        console.log(b);
    }
    test();
});

Ожидаемый результат:

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