0

查看 Google 的书签气泡库代码,我发现了这个:

var google = google || {};
google.bookmarkbubble = google.bookmarkbubble || {};

有人可以解释他们在这里做什么以及为什么要这样做吗?既然 JS 是一种解释性语言,为什么你需要将相同的 google 对象分配给 google 变量?每次加载页面时,其中包含的脚本不会只执行一次吗?

4

3 回答 3

2

他们正在建立一个类似命名空间的对象。如果已经有一个google对象或google.bookmarkbubble对象,他们会确保不会替换它。例如,如果您添加了另一个 Google 库,它可能已经设置了一个google如下所示的对象:

{
    somelibrary: {
        ...
    }
}

因此,如果他们只有:

var google = { bookmarkbubble: { ... } }

这会破坏任何引用的代码google.somelibrary。同样,如果他们没有var google = google || {};并且您还没有google定义,那么google.bookmarkbubble将引发错误。

简而言之,此代码确保google.bookmarkbubble对象存在而不覆盖任何先前定义的google对象google.bookmarkbubble

于 2012-07-13T14:27:16.417 回答
1

var google = google || {};是一种简写语法

if (!google) {
  google = {};
}

这确保了第二次分配不会因为google至少是一个空哈希而失败。

于 2012-07-13T14:31:35.790 回答
0

当一个库包含许多用户可能包含或不包含的文件时,通常会这样做。第一个库将初始化google为一个空对象(因为它的计算结果为空),随后的库将保留已添加到该对象的属性。

于 2012-07-13T14:26:54.543 回答