【问题标题】:Re-defining global variable with conflicting local variable使用冲突的局部变量重新定义全局变量
【发布时间】:2013-08-06 23:39:35
【问题描述】:

所以我试图掌握 JavaScript 的作用域并查找大量有关它的信息。我看到很多关于人们不小心制作与全局变量冲突的局部变量的问题。

但我想知道是否有办法在局部变量冲突的情况下更改全局变量。 喜欢:

    var globalVariable = 6;

    var func1 = function() {
       this.func2 = function() {
          var globalVariable = 99;   
                   = 7;
       }
    };
    print(globalVariable);

尽管局部变量名冲突,有没有办法更改全局变量值?

当我尝试this.globalVariable = 7 打印 7 作为输出时,它不起作用。谁能弄清楚为什么this.access 不起作用,或者如果碰巧有一个本地名称冲突,是否有办法更改全局变量?

显然这样写代码没有意义,但我想我明白this.关键字总是指定全局变量/对象?

【问题讨论】:

标签: javascript scope global-variables local-variables


【解决方案1】:

“我以为我理解this. 关键字总是指定全局变量/对象?”

没有。 this的值取决于函数的调用方式以及函数是否在strict mode中。

在浏览器中全局变量是window对象的属性,所以使用:

window.globalVariable = 7;

有时this 等于window,但通常不是。 (我并不是说听起来像 this 只是随机设置;有一个适用的 specific set of rules。)

请注意,如果您发现自己需要像这样区分全局变量和局部变量,您很可能使用了太多全局变量。

【讨论】:

    【解决方案2】:

    你可以使用 window['globalVariable'] = 7;

    虽然这不是一个好的解决方案。真的没有。

    “this”变量通常指的是当前函数的作用域,除非它被绑定到其他东西或被调用/应用(.call/.apply)。我建议使用谷歌搜索函数范围,因为它可能会让人很困惑。

    如果您还有其他问题,我在 Skype 上 (thetenfold)。

    【讨论】:

    • this 和范围是两个不同的东西。函数的作用域取决于它的定义位置(即它嵌套在其中的其他函数,如果有的话),与 this 可能设置的内容无关。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-04
    • 1970-01-01
    • 2019-10-01
    • 2014-02-12
    • 1970-01-01
    相关资源
    最近更新 更多