我正在阅读backbone.js文档,并看到了许多将属性分配给窗口对象的代码:
window.something = "whatever";
调用这段代码和只赋值变量并创建全局变量之间有什么区别,如下所示:
something = "whatever";
我假设有一些不同的作用域,和/或对象所有权的差异(窗口是所有者和不是),但我感兴趣的是两者之间的细节,以及为什么我会使用窗口而不使用它。
发布于 2011-06-15 04:14:19
它们都做着同样的事情。
但是通过访问window
属性,您可以肯定地知道,无论您处于什么作用域中,都可以访问全局变量。
例如:
globalVar = "smth";
function(){
var globalVar = 2;
alert(globalVar);// points to the current scope globalVar
alert(window.globalVar);// points to the original globalVar
}
换句话说,如果您想使用全局变量,那么通过它们的容器访问它们会更安全一些:window.variable
发布于 2011-06-15 04:04:44
正如Raynos提到的,关键是它是在window对象上显式设置的。在浏览器中,全局对象与窗口对象相同,但在其他环境中(例如,node.js,或者可能在移动设备上的某种网络视图中运行),全局对象可能不同。
发布于 2011-06-15 03:58:40
不同之处在于,window.foo = bar;
不能被稍后完成的重构截获。使用foo = bar;
意味着,如果在以后将代码移动到定义了var foo
的闭包中,它将不再在全局对象上设置它。
https://stackoverflow.com/questions/6349232
复制相似问题