Existem duas partes principais que var FOO = FOO || {};cobrem.
# 1 Prevenção de substituições
Imagine que você tem seu código dividido em vários arquivos e seus colegas de trabalho também estão trabalhando em um objeto chamado FOO. Então, isso pode levar ao caso de alguém já ter definido FOOe atribuído uma funcionalidade a ele (como uma skateboardfunção). Em seguida, você o substituiria, se não estivesse verificando se ele já existe.
Caso problemático:
// 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!');
};
Nesse caso, a skateboardfunção desaparecerá se você carregar o arquivo JavaScript homer.jsdepois bart.jsem seu HTML, porque Homer define um novo FOOobjeto (e, portanto, substitui o existente de Bart), então ele só sabe sobre a donutfunção.
Portanto, você precisa usar o var FOO = FOO || {};que significa "FOO será atribuído a FOO (se já existir) ou um novo objeto em branco (se FOO ainda não existir).
Solução:
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!');
};
Como Bart e Homer agora estão verificando a existência de FOOantes de definirem seus métodos, você pode carregar bart.jse homer.jsem qualquer ordem, sem substituir os métodos um do outro (se eles tiverem nomes diferentes). Assim, você sempre obterá um FOOobjeto que possui os métodos skateboarde donut(Yay!).
# 2 Definindo um novo objeto
Se você leu o primeiro exemplo, então sabe qual é o propósito do || {}.
Porque se não houver nenhum FOOobjeto existente , o caso OR se tornará ativo e criará um novo objeto, para que você possa atribuir funções a ele. Gostar:
var FOO = {};
FOO.skateboard = function() {
alert('I like skateboarding!');
};