我应该使用window.variable还是var?

我们有很多设置JS代码,它们定义了面板,按钮等,这些代码将用于许多其他JS文件。

通常情况下,我们做类似的事情

grid.js

var myGrid = .....

combos.js

var myCombo = .....

然后,在我们的应用程序代码中,我们:

的application.js

function blah() {
    myGrid.someMethod()
}

someother.js

function foo() {
    myCombo.someMethod();
    myGrid.someMethod();
}

所以,我们应该使用var myGrid还是更好地使用window.myGrid

有什么不同?


我会建议创建一个命名空间变量var App = {};

App.myGrid = ...

这样你可以限制全球名字空间的污染。

编辑:关于变量问题的数量 - 想到两种可能的解决方案:

  • 你可以通过类型(网格,按钮等)或关系(ClientInfoSection,AddressSection等)进一步命名空间,
  • 你将你的方法封装在用你拥有的组件实例化的对象中
  • 例如:你有

    function foo() {
        myCombo.someMethod();
        myGrid.someMethod();
    }
    

    变为:

    var Foo = function(combo, grid) {
        var myCombo = combo;//will be a private property
        this.myGrid = grid;//will be a public property
        this.foo = function() {//public method
            myCombo.someMethod();
            myGrid.someMethod();
        }
    }
    App.myFoo = new Foo(someCombo, someGrid);
    App.myFoo.foo();
    

    这样你可以限制小对象的数量,只显示你需要的东西(即foo函数)

    PS:如果你需要公开内部组件,那么将它们添加到构造函数中


    功能上潜在的重要区别是window.myGrid可以被delete ,而var myGrid不能。

    var test1 = 'value';
    window.test2 = 'value';
    
    
    console.log( delete window.test1 ); // false ( was not deleted )
    console.log( delete window.test2 ); // true  ( was deleted )
    
    
    console.log( test1 );  // 'value'         ( still accessible )
    console.log( test2 );  // ReferenceError  ( no longer exists )
    

    window.variable一个很好的window.variable是你可以检查它而不会有javascript错误。 例如,如果你有:

    if (myVar) {
        //do work
    }
    

    myVar没有在页面的任何地方定义,你会得到一个JavaScript错误。 然而:

    if (window.myVar) {
        //do work
    }
    

    不会产生任何错误,并且可以按照预期工作。

    var myVar = 'test'window.myVar = 'test'大致相同。

    除此之外,正如其他人所说,您应该从一个全局对象下降以避免污染全局名称空间。

    链接地址: http://www.djcxy.com/p/96521.html

    上一篇: Should I use window.variable or var?

    下一篇: Simple Javascript question