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