0

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

但是我想知道尽管局部变量冲突,是否有办法更改全局变量。像:

    var globalVariable = 6;

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

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

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

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

4

2 回答 2

0

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

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

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

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

于 2013-08-07T00:11:13.207 回答
0

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

否。 的值this取决于函数的调用方式以及函数是否处于严格模式

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

window.globalVariable = 7;

有时this等于window,但通常不是。(我并不是说这听起来像是this随机设置的;有一组特定的规则适用。)

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

于 2013-08-07T00:12:02.133 回答