Javascript - 变量保留其价值有多深?

时间:2012-02-16 15:08:37

标签: javascript callback google-chrome-extension

Noob在这里提问。请参阅下面的代码。 我在哪里可以阅读更多内容?我的意思是,this_variable获得 100 。所有后来定义的函数似乎都能够访问这个变量并获得它的价值,但是我想知道它有多深?我正在研究Chrome扩展程序,该死的东西只适用于回调;我需要能够在一个非常深层嵌套的回调中访问内容,我需要确保我写的内容是可靠的并且保持一致。

(function(){

    this_variable = 100;

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

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

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

5 个答案:

答案 0 :(得分:6)

没有限制。虽然如果你的嵌套深度足以担心限制,我会质疑整体设计。

答案 1 :(得分:2)

只要变量是'范围',就可以访问它(假设它没有被隐藏)。您可以随意嵌套。请参阅MDN的here for scoping and closure reference

答案 2 :(得分:2)

尽可能深入。该概念的名称为closures,在编写高级JavaScript时,它是重要概念。

答案 3 :(得分:1)

就你而言..

在某些时候它可能会变慢,但在回调中仍然可以访问。

答案 4 :(得分:0)

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. 未捕获的ReferenceError:b未定义