var FOO = FOO || {}; 涵盖了两个主要部分。
#1 防止覆盖
假设您将代码拆分为多个文件,并且您的同事也在处理一个名为 FOO 的对象。然后它可能导致有人已经定义了FOO 并为其分配了功能(如skateboard 函数)。然后你会覆盖它,如果你不检查它是否已经存在。
问题案例:
// Definition of co-worker "Bart" in "bart.js"
var FOO = {};
FOO.skateboard = function() {
alert('I like skateboarding!');
};
// Definition of co-worker "Homer" in "homer.js"
var FOO = {};
FOO.donut = function() {
alert('I like donuts!');
};
在这种情况下,如果您在 HTML 中的 bart.js 之后加载 JavaScript 文件 homer.js,则 skateboard 函数将消失,因为 Homer 定义了一个新的 FOO 对象(从而覆盖了来自 Bart 的现有对象)所以它只知道donut 函数。
所以你需要使用var FOO = FOO || {};,这意味着“FOO 将被分配给 FOO(如果它已经存在)或一个新的空白对象(如果 FOO 不存在)。
解决方案:
var FOO = FOO || {};
// Definition of co-worker Bart in bart.js
FOO.skateboard = function() {
alert('I like skateboarding!');
};
// Definition of co-worker Homer in homer.js
var FOO = FOO || {};
FOO.donut = function() {
alert('I like donuts!');
};
因为 Bart 和 Homer 现在在定义其方法之前检查 FOO 是否存在,所以您可以按任意顺序加载 bart.js 和 homer.js 而不会覆盖彼此的方法(如果它们具有不同的名称)。所以你总是会得到一个FOO 对象,它有skateboard 和donut 方法(耶!)。
#2 定义一个新对象
如果您已经阅读了第一个示例,那么您现在已经知道|| {} 的用途是什么。
因为如果没有现有的FOO 对象,那么 OR-case 将激活并创建一个新对象,因此您可以为其分配功能。喜欢:
var FOO = {};
FOO.skateboard = function() {
alert('I like skateboarding!');
};