为什么在JS库中复制变量名并添加“或对象”是常见的做法
Why is it common practice in JS libraries to duplicate variable name and adding 'or object'
我试图更好地掌握JS语法,我想知道为什么在许多库中,在已经声明了具有相同名称的变量之后重复对象名称是常见的做法。请看下面:
var Backbone = Backbone || {}; // <= Why the duplication?
或
var listeners = this._listeners || (this._listeners = {});
更新:
经过进一步的研究,我发现了一篇写得很好的文章,评估了许多惯用语。
本文还解释了立即调用函数表达式 (IIFE( 背后的用法,即将函数包装在函数中,如下所示:
(function() {
console.log('Hello!');
})();
这是像我这样的新手无法完全理解的另一个 JS 脑筋急转弯。
var Backbone = Backbone || {};
表示如果Backbone
undefined
或null
或false
,则将其设置为 {}
更长的解释:
赋值运算符从右到左计算,逻辑运算符(即使 Javascript 没有真正的逻辑运算符,因为它们也处理非布尔操作数(从左到右计算。
像 A || B
这样的表达式如果A
是 undefined
、null
或 false
则返回B
。
因此,如果A = A || B
已经有一个值,则A
保留该值,或者将B
分配给A
。
var Backbone = Backbone || {};
正如其他人所解释的,此代码将执行以下操作:
- 声明变量 Backbone,检查变量 Backbone 是否已经存在于范围内,
- 如果是,则分配该对象(在 JS 中所有内容是一个对象(到我们声明的变量(顺便说一下,它有同名(
- 如果否,它将创建一个新的空对象。
这样做的目的是模块化。假设您正在加载几个骨干插件,以及裸露的骨干。
- 首先,您加载了基本主干。
- 该脚本检查根作用域对象是否检查根作用域对象主干是否存在(即窗口。骨干( 它
- 没有,所以我们创建一个空的并用它做一些事情。
- 现在,下一个插件脚本检查根对象 Backbone 是否存在(确实存在(
- 由于它确实存在,因此它不会创建新的空对象,而是使用现有的空对象
- 现在它就像这样,直到加载所有插件。
这并不完全正确,但这样的事情会发生。
这是一种仅在
尚未分配变量值时才默认变量值的方法。您可以将其视为使用默认值执行可选函数参数的 JS 方式。
相关文章:
- 处理docXTemplater或javascript对象数组中未定义的值
- 插件SDK中的动态或计算对象创建
- 对象等于self或空对象
- 在Javascript数组或一个对象中存储多个数据所需的Tweak
- 使用Javascript在Html中将Xml数据或Json对象预览为Xml树
- 在分析中创建或更新对象
- 多重继承或访问对象外部的属性和方法
- Grails richui自动完成将对象传递给函数或更新对象ID
- 如何使用 dedeclare 定义 dojo 静态变量或静态对象
- 如何动态加载 JavaScript 对象或调用对象方法
- 原型揭示模式和'这'嵌套函数或返回对象中
- 调用本机原型方法时扩展或继承对象原型
- Javascript - 更快的功能:线性列表搜索或获取对象值
- 将 C# 对象转换为 JSON 或 Javascript 对象
- 如何在 Firefox 中查找特定的缓存条目并将它们转换为文件或 Blob 对象
- 什么是原型?构造函数或其他对象
- 在对象上调用方法或将对象作为函数参数传递的差异
- 光滑的旋转木马如何将当前幻灯片作为 dom 或 jquery 对象获取
- 更新对象或创建对象(如果不存在)
- 为什么在 IE8 中的 Jquery 插件中设置了一个选项“空或无对象”