【发布时间】:2013-01-10 23:25:07
【问题描述】:
我对 Javascript 中的变量范围有疑问。我在不同时间加载的网页上有一系列脚本。例如,我需要一个名为 MyVar 的全局对象,以便所有人都可以访问。我想避免重新定义它,但我想它必须在某个时候由第一个脚本定义。我的问题是使用var MyVar = MyVar || {} 解决方案吗?
谢谢
/**
* Script 1
*/
var MyVar = MyVar || {};
MyVar.config = {
x : 2,
y : 3
};
/**
* Script 2
*/
//is this correct?
var MyVar = MyVar || {};
//to which MyVar am I assigning the apple property?
MyVar.apple = 'red';
更新
到目前为止,伙计们给出了很好的答案。
最后一部分,当我第二次重复var MyVar = MyVar || {}; 时,第二个 var 语句在做什么?它是否在名为 MyVar 的全局范围内创建了一个新变量,该变量被分配了现有 MyVar 的值?
其他发帖人认为我在<script> 标签中同步加载了这些脚本是正确的,但是由于分工,我创建脚本然后不控制它们何时以及如何加载,因此需要一种万无一失的方法来创建/ 利用我的MyVar 对象。
谢谢
【问题讨论】:
-
是的,您的代码可以工作。是的,您应该尽可能避免使用全局变量。
-
将
var MyVar = MyVar || {};读作var MyVar = MyVar if it exists (and isn't equal to false or 0) , or a new object if it doesn't。
标签: javascript variables scope global-variables