javascript - "var FOO = FOO || {}"(将变量或空对象分配给该变量)在 Javascript 中意味着什么?

标签 javascript namespaces variable-declaration or-operator

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

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

但我不知道||是什么{} 会。

我知道 {} 等于 new Object() 并且我认为 || 用于“如果它已经存在”之类的东西使用它的值,否则使用新对象。

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

最佳答案

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

在文件顶部看到的这种特殊模式用于创建一个命名空间,即一个命名对象,可以在该命名对象下创建函数和变量,而不会过度污染全局对象。

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

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

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

两者共享同一个命名空间,那么无论这两个文件的加载顺序如何,您仍然会得到 func1func2MY_NAMESPACE 中正确定义正确反对。

加载的第一个文件将创建初始MY_NAMESPACE对象,任何随后加载的文件都会增强该对象。

有用的是,这还允许异步 加载共享同一命名空间的脚本,从而缩短页面加载时间。如果<script>标签有 defer属性集您无法知道它们的解释顺序,因此如上所述,这也解决了该问题。

关于javascript - "var FOO = FOO || {}"(将变量或空对象分配给该变量)在 Javascript 中意味着什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6439579/

相关文章:

javascript - 为用户显示图像 src 转换

javascript - 怎么了?通过字符串定义 JavaScript 命名空间

javascript - 在第一行代码中声明所有 javascript 变量的标准?

javascript - Sequelize 关联包含返回 null

javascript - 在 Internet Explorer 中输入文件长度

php - SimpleXML:使用包含命名空间的 XML

ruby-on-rails-3 - Rails 3 命名空间路由

c++ - 为什么单独初始化一个新变量是有效的?

c++ - 快速检查 C++ 中的递增/递减运算符

javascript - 期望 toNotBe() 未定义不是函数