Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么在JS库中复制变量名并添加';或对象';_Javascript_Oop - Fatal编程技术网

Javascript 为什么在JS库中复制变量名并添加';或对象';

Javascript 为什么在JS库中复制变量名并添加';或对象';,javascript,oop,Javascript,Oop,我正试图更好地掌握JS语法,我想知道为什么在声明了同名变量之后,在许多库中重复对象名是一种常见的做法。请参阅下文: var Backbone = Backbone || {}; // <= Why the duplication? 更新: 经过进一步的研究,我发现了一个非常好的评价许多惯用表达的书面报告 本文还解释了立即调用函数表达式(IIFE)背后的用法,即在函数中包装函数,如: (function() { console.log('Hello!'); })(); 这是另一

我正试图更好地掌握JS语法,我想知道为什么在声明了同名变量之后,在许多库中重复对象名是一种常见的做法。请参阅下文:

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

经过进一步的研究,我发现了一个非常好的评价许多惯用表达的书面报告

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

(function() {
  console.log('Hello!');
})();
这是另一个像我这样的新手不能完全理解的JS脑筋急转弯

var Backbone = Backbone || {};
表示如果
主干
未定义或
,则将其设置为
{}


详细解释:

赋值运算符的计算范围是从逻辑运算符(即使Javascript在处理非布尔操作数时也没有真正的逻辑运算符),计算范围是从

如果
A
未定义的
null
false,则类似
A | | B
的表达式返回
B


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

这是一种仅在尚未赋值时才默认变量值的方法。您可以将其视为使用默认值执行可选函数参数的JS方式

var Backbone = Backbone || {};
正如其他人所解释的,此代码将执行以下操作:

  • 声明一个可变主干,检查是否已经有一个可变主干 在这个范围内,
  • 如果是,则指定该对象(在JS中) 是一个对象)到我们声明的变量(顺便说一句,该变量具有 (同名)
  • 如果否,它将创建一个新的空对象
其目的是模块化。假设您正在加载几个主干插件以及裸主干

  • 首先,您加载了基本主干
  • 脚本检查根作用域对象是否检查根作用域对象主干是否存在(即window.Backbone)
  • 它没有,所以我们创建一个空的,并用它做一些事情
  • 现在,下一个插件脚本检查根对象主干是否存在(确实存在)
  • 因为它确实存在,所以它不会创建新的空对象,而是使用现有的空对象
  • 现在是这样的,直到所有的插件都被加载

这并不完全正确,但类似的情况会发生。

通常用于命名空间构建@fardjad非常感谢你的回答。我的代表一到15岁,我就会投票给你的答案@techfoobar感谢您的更新!:)
var Backbone = Backbone || {};