Javascript-一个变量能在多大程度上保持其价值

Javascript - How deeply can a variable retain its value?

本文关键字:程度 一个 变量 Javascript-      更新时间:2023-09-26

这里没有问题。请参阅下面的代码。我在哪里可以阅读更多关于这方面的信息?我的意思是,this_variable得到100。所有随后定义的函数似乎都能够访问这个变量并获得它的值,但我想知道这有多深入?我正在开发Chrome扩展,而这该死的东西只适用于回调;我需要能够在一个嵌套很深的回调中访问内容,并且我需要确保我所写的内容是可靠的,并且保持一致。

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

没有限制。不过,如果你嵌套得足够深,以至于担心限制,我会对整体设计提出质疑。

随心所欲。该概念的名称是闭包,是编程高级javascript时最重要的概念。

只要变量"在作用域中",就可以访问它(假设它没有隐藏)。你可以随心所欲地筑巢。有关MDN的作用域和闭包引用,请参见此处。

就你而言。。

它可能在某个时候会更慢,但应该仍然可以通过回调访问。

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