如何通过 JavaScript 访问一些具有相同名称的变量? [复制]

Posted

技术标签:

【中文标题】如何通过 JavaScript 访问一些具有相同名称的变量? [复制]【英文标题】:How get access to some variables with same names by JavaScript? [duplicate] 【发布时间】:2016-03-23 22:57:16 【问题描述】:

我有 3 个具有相同名称(值)的变量。我想从内部函数(f2)中读取所有内容。 帮我为下一个案例编写代码(参见警报块)

var value = "global"
function f1() 
    var value = "external";

    function f2() 
        var value = "internal";

        alert(any code 1?) // global
        alert(any code 2?) // external
        alert(any code 3?) // internal
    

例如 ActionScript 的工作原理:

var _value = "global"

function f1() 
    var _value = "external";

    function f2() 
        var ext=_value
        var _value = "internal";

        trace(_root._value)     // works: global
        trace(ext)              // works: external
        trace(_value)           // works: internal
    
    f2()

f1()

或通过对象激活的 ActionScript(但我知道 javascript 拒绝访问此对象):

var _value = "global"

function f1() 
    var _value = "external";

    function f2() 
        _value // do link to object activation (by f1)
        var _value = "internal";

        trace(_root._value)     // works: global
        trace(this._value)      // works: external
        trace(_value)           // works: internal      
    
    f2()

f1()

【问题讨论】:

与***.com/questions/7186171/…相关 我认为您应该为它们使用不同的 nane。内部变量或窄范围变量应具有较短的名称。如果实在想不出替代名称,可以将最里面的变量命名为_value 在链接中查找问题。问题是,JavaScript 并没有真正以这种方式分离作用域的机制:全局对象总是可以访问的,如果你试图在函数中声明一个同名的变量,它们就会被覆盖。 谢谢,但这不是实践,而是理论问题。例如对于 ActionScript,它很容易决定 Praveen Kumar,它不是重复的。因为你的链接只说root scope,而不是关于内部功能 【参考方案1】:

相同的名称将被覆盖。但是对于全球,我想你可以使用window.

var value = "global"
function f1() 
    var value = "external";

    function f2() 
        var value = "internal";

        alert(window.value)  // works: global
        alert(any code 2?)   // no idea: external
        alert(value)         // works: internal
    

有趣的是,f2() 只能从f1() 访问!正如Rajesh 评论的那样,一个小小的改动就可以让您访问所有内容:

var value = "global"
function f1(value) 
    var global_value = value;
    var value = "external";

    function f2(value) 
        var internal_value = value;
        var value = "internal";

        alert(window.value)     // works: global
        alert(global_value)     // works: global
        alert(internal_value)   // works: external
        alert(value)            // works: internal
    

【讨论】:

我相信你可以将external变量作为函数参数传递,因为f2()只能从f1()调用 @Rajesh 已更新并已添加。谢谢。 不,不是。它是强变量(不是参数)。并且可以从根调用(如果 f1 将链接返回到 f2 到根就很容易) @user5555232 你能澄清一下你在说什么吗? alert(this.value) // 有效:global alert(global_value) // undefined // 无效: global alert(internal_value) // undefined // 无效:external alert(value) / / 作品:内部

以上是关于如何通过 JavaScript 访问一些具有相同名称的变量? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

C ++继承类具有同名成员

利用eval()来“欺骗”JavaScript词法作用域

使用具有同名方法的派生类对象访问基类的方法

如何实现对象内部插槽属性

显示所有同名印象笔记笔记的标题和内容

如何使用 JPA 原生查询选择多个同名的列?