从 JavaScript 中的执行上下文检索值

2024-02-20

var value = 10;

var outer_funct = function(){
    var value = 20;

    var inner_funct = function(){
        var value = 30;

        console.log(value); // logs 30
        console.log(window["outer_funct"]["value"]); // What I would like to log here is the value 20.
        console.log(window["value"]); // logs 10
    };

    inner_funct();
};

outer_funct();

我相信第二个日志返回未定义的原因是因为 window["outer_funct"] 引用函数对象,并且函数对象没有与之关联的属性“值”。相反,我想做的是参考执行上下文当调用 window["outer_funct"] 时。这可以在inner_funct的执行上下文中完成吗?


我相信第二个日志返回未定义的原因是因为 window["outer_funct"] 引用函数对象,并且函数对象没有与之关联的属性“值”。

Correct.

相反,我想做的是在调用 window["outer_funct"] 时引用执行上下文。这可以在inner_funct的执行上下文中完成吗?

不,不是因为你有影子value(声明于inner_funct)。如果该符号已被这样覆盖,您将无法获得它。当然,您可以将其放入另一个符号中:

var value = 10;

var outer_funct = function(){
    var value = 20;

    var outer_value = value;

    var inner_funct = function(){
        var value = 30;

        console.log(value);        // logs 30
        console.log(outer_value);  // logs 20
        console.log(window.value); // logs 10
    };

    inner_funct();
};

outer_funct();

If you hadn't阴影它,然后你可以参考value在包含上下文中,例如:

var value1 = 10;

var outer_funct = function(){
    var value2 = 20;

    var inner_funct = function(){
        var value3 = 30;

        console.log(value3); // logs 30
        console.log(value2); // logs 20
        console.log(value1); // logs 10
    };

    inner_funct();
};

outer_funct();

值得注意的是,您的原始代码的唯一原因是window["value"]10(顺便说一句,你也可以使用window.value)是var value = 10;是在全球范围内。所有声明的变量var成为全局对象的属性,在浏览器上通过以下方式引用window(从技术上来说,window本身只是全局对象上指向全局对象的属性)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从 JavaScript 中的执行上下文检索值 的相关文章

随机推荐