Hay dos partes principales que var FOO = FOO || {};cubre.
# 1 Prevención de anulaciones
Imagine que tiene su código dividido en varios archivos y sus compañeros de trabajo también están trabajando en un objeto llamado FOO. Entonces podría dar lugar al caso de que alguien ya haya definido FOOy asignado una funcionalidad (como una skateboardfunción). Entonces lo anularía, si no estuviera comprobando si ya 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!');
};
En este caso, la skateboardfunción desaparecerá si carga el archivo JavaScript homer.jsdespués bart.jsen su HTML porque Homer define un nuevo FOOobjeto (y por lo tanto anula el existente de Bart), por lo que solo conoce la donutfunción.
Por lo tanto, debe usar lo var FOO = FOO || {};que significa "FOO se asignará a FOO (si ya existe) o un nuevo objeto en blanco (si FOO aún no existe).
Solución:
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!');
};
Debido a que Bart y Homer ahora están verificando la existencia de FOOantes de definir sus métodos, puede cargar bart.jsy homer.jsen cualquier orden sin anular los métodos del otro (si tienen nombres diferentes). Por lo tanto, siempre obtendrá un FOOobjeto que tenga los métodos skateboardy donut(¡Yay!).
# 2 Definiendo un nuevo objeto
Si ha leído el primer ejemplo, entonces ya sabe cuál es el propósito de || {}.
Porque si no hay un FOOobjeto existente, entonces el caso OR se activará y creará un nuevo objeto, por lo que puede asignarle funciones. Me gusta:
var FOO = {};
FOO.skateboard = function() {
alert('I like skateboarding!');
};