一尘不染

“ var FOO = FOO ||是什么?{}”(将变量或空对象分配给该变量)在Javascript中是什么意思?

javascript

在查看在线源代码时,我在几个源文件的顶部遇到了这个问题。

var FOO = FOO || {};
FOO.Bar = …;

但是我不知道该怎么办|| {}

我知道{}等于new Object(),我认为表示||类似“如果它已经存在,请使用其值,否则请使用新对象。

为什么我会在源文件的顶部看到它?


阅读 456

收藏
2020-04-25

共1个答案

一尘不染

您对的意图的猜测|| {}非常接近。

当在文件顶部看到该特定模式时,该模式用于创建 名称空间 (即命名对象),在该 命名空间 下可以创建函数和变量,而不会过度污染全局对象。

究其原因 ,为什么 它的使用是如此,如果你有两个(或更多)的文件:

var MY_NAMESPACE = MY_NAMESPACE || {};
MY_NAMESPACE.func1 = {
}

var MY_NAMESPACE = MY_NAMESPACE || {};
MY_NAMESPACE.func2 = {
}

这两个份额的同一个命名空间那么也没关系,其中责令这两个文件被加载,你仍然可以func1func2正确的中定义MY_NAMESPACE正确的对象。

加载的第一个文件将 创建 初始MY_NAMESPACE对象,任何后续加载的文件将 扩展 该对象。

有用的是,这还允许 异步
加载共享相同名称空间的脚本,从而可以缩短页面加载时间。如果<script>标记defer设置了属性,则您将不知道它们将按什么顺序解释,因此如上所述,这也解决了该问题。

2020-04-25