Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/378.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么以及何时应该使用window.varName来声明全局变量?_Javascript - Fatal编程技术网

Javascript 为什么以及何时应该使用window.varName来声明全局变量?

Javascript 为什么以及何时应该使用window.varName来声明全局变量?,javascript,Javascript,我刚刚遇到了一个我从未见过的大会: window.theme = window.theme || {}; 花了一些时间研究它,我发现这是使用var声明全局变量的替代方法。为什么,什么时候我会想那样做?这仅仅是因为个人喜好吗 另外:这与问题没有直接关系,但OR运算符也让我感到困惑。我理解它的功能:它将window.theme设置为空对象(如果它不存在)。如果脚本中的其他地方已经实例化了它,那么这只是作为一种安全预防措施吗?请在全局级别上查看window.varName vs var varNam

我刚刚遇到了一个我从未见过的大会:

window.theme = window.theme || {};
花了一些时间研究它,我发现这是使用
var
声明全局变量的替代方法。为什么,什么时候我会想那样做?这仅仅是因为个人喜好吗


另外:这与问题没有直接关系,但OR运算符也让我感到困惑。我理解它的功能:它将
window.theme
设置为空对象(如果它不存在)。如果脚本中的其他地方已经实例化了它,那么这只是作为一种安全预防措施吗?

请在全局级别上查看window.varName vs var varName的答案:

我个人的偏好是避免全局变量,因为在企业应用程序中,它们容易发生冲突,其他人会干扰它们,等等。安全性也会成为一个问题(您是否希望从天知道从哪里访问该变量的错误脚本?)。它们类似于Java类中的公共字段。“现代”JS开发使用依赖注入或持久服务来共享数据

您所指的特定语法在伪代码中如下所示: 将window.theme设置为自身或空对象。表达式从左到右求值,因此如果定义了
window.varName
,JS将其求值为排序的“true”,并在此处结束,将其分配给自身。如果
window.varName
未定义,则该语句的计算结果为false,OR将导致
window.varName
被分配到右侧的
{}

关于它如何操作的更明确的视图是将其作为三元运算符编写:
window.varName=(window.varName?window.varName:{}),但为了简单起见,大多数人更喜欢您的代码段,并使用三元运算符进行单线赋值,条件比简单的未定义检查更复杂

在执行或将属性附加到要定义的对象时,您所引用的语法是常见的做法。如果它已经存在,那么继续,否则将它设置为空对象,这样就不会出现错误