在查看在线源代码时,我在几个源文件的顶部遇到了这个问题。
var FOO = FOO || {}; FOO.Bar = …;
但是我不知道该怎么办|| {}。
|| {}
我知道{}等于new Object(),我认为表示||类似“如果它已经存在,请使用其值,否则请使用新对象。
{}
new Object()
||
为什么我会在源文件的顶部看到它?
您对的意图的猜测|| {}非常接近。
当在文件顶部看到该特定模式时,该模式用于创建 名称空间 (即命名对象),在该 命名空间 下可以创建函数和变量,而不会过度污染全局对象。
究其原因 ,为什么 它的使用是如此,如果你有两个(或更多)的文件:
var MY_NAMESPACE = MY_NAMESPACE || {}; MY_NAMESPACE.func1 = { }
和
var MY_NAMESPACE = MY_NAMESPACE || {}; MY_NAMESPACE.func2 = { }
这两个份额的同一个命名空间那么也没关系,其中责令这两个文件被加载,你仍然可以func1和func2正确的中定义MY_NAMESPACE正确的对象。
func1
func2
MY_NAMESPACE
加载的第一个文件将 创建 初始MY_NAMESPACE对象,任何后续加载的文件将 扩展 该对象。
有用的是,这还允许 异步 加载共享相同名称空间的脚本,从而可以缩短页面加载时间。如果<script>标记defer设置了属性,则您将不知道它们将按什么顺序解释,因此如上所述,这也解决了该问题。
<script>
defer