为什么在JS库中复制变量名并添加“或对象”是常见的做法

Why is it common practice in JS libraries to duplicate variable name and adding 'or object'

本文关键字:或对象 对象 常见 JS 复制 添加 变量名 为什么      更新时间:2023-09-26

我试图更好地掌握JS语法,我想知道为什么在许多库中,在已经声明了具有相同名称的变量之后重复对象名称是常见的做法。请看下面:

var Backbone = Backbone || {};    // <= Why the duplication?

var listeners = this._listeners || (this._listeners = {});

更新:

经过进一步的研究,我发现了一篇写得很好的文章,评估了许多惯用语。

本文还解释了立即调用函数表达式 (IIFE( 背后的用法,即将函数包装在函数中,如下所示:

(function() {
  console.log('Hello!');
})();

这是像我这样的新手无法完全理解的另一个 JS 脑筋急转弯。

var Backbone = Backbone || {};

表示如果Backbone undefinednullfalse,则将其设置为 {}


更长的解释:

赋值运算符从计算,逻辑运算符(即使 Javascript 没有真正的逻辑运算符,因为它们也处理非布尔操作数(从计算。

A || B 这样的表达式如果Aundefinednullfalse 则返回B

因此,如果A = A || B已经有一个值,则A保留该值,或者将B分配给A

var Backbone = Backbone || {};

正如其他人所解释的,此代码将执行以下操作:

  • 声明变量 Backbone,检查变量 Backbone 是否已经存在于范围内,
  • 如果是,则分配该对象(在 JS 中所有内容是一个对象(到我们声明的变量(顺便说一下,它有同名(
  • 如果否,它将创建一个新的空对象。

这样做的目的是模块化。假设您正在加载几个骨干插件,以及裸露的骨干。

  • 首先,您加载了基本主干。
  • 该脚本检查根作用域对象是否检查根作用域对象主干是否存在(即窗口。骨干(
  • 没有,所以我们创建一个空的并用它做一些事情。
  • 现在,下一个插件脚本检查根对象 Backbone 是否存在(确实存在(
  • 由于它确实存在,因此它不会创建新的空对象,而是使用现有的空对象
  • 现在它就像这样,直到加载所有插件。

这并不完全正确,但这样的事情会发生。

这是一种仅在

尚未分配变量值时才默认变量值的方法。您可以将其视为使用默认值执行可选函数参数的 JS 方式。