我应该使用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 = ...
这样你可以限制全球名字空间的污染。
编辑:关于变量问题的数量 - 想到两种可能的解决方案:
例如:你有
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