使用冲突的局部变量重新定义全局变量

时间:2013-08-06 23:39:35

标签: javascript scope global-variables local-variables

因此,我试图了解JavaScript的范围并查找有关它的大量信息。我看到很多关于人们意外地使局部变量与全局变量冲突的问题。

但我想知道是否有办法改变全局变量,尽管局部变量存在冲突。 喜欢:

    var globalVariable = 6;

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

有没有办法改变全局变量值尽管存在冲突的局部变量名?

当我尝试this.globalVariable = 7打印7作为输出时,它不起作用。任何人都可以清楚地说明为什么this.访问不起作用,或者如果确实有一种方法可以改变全局变量,如果碰巧有一个本地冲突的名称?

显然以这种方式编写代码是没有意义的,但我认为我理解this.关键字总是指定全局变量/对象?

2 个答案:

答案 0 :(得分:0)

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

但这不是一个好的解决方案。确实没有。

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

如果您有任何其他问题,我会使用Skype(这个问题)。

答案 1 :(得分:0)

  

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

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

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

window.globalVariable = 7;

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

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