【发布时间】:2016-01-13 02:33:28
【问题描述】:
在阅读annotated Backbone source code时,我遇到了这样的作业:
var Events = Backbone.Events = {};
我了解发生了什么:将一个空对象分配给Backbone.Events,然后将其分配给Events。
作业写成这样的原因是什么?
总的来说,我知道多个左手分配是一个坏主意,因为如果这样做:
var a = b = c = 1;
b 和 c 被提升到全局命名空间,但在主干的情况下,Events 是一个局部变量,Backbone.Events 绑定到 Backbone 对象,所以这里没有范围污染 –它是否正确?
那么是这样写的,所以在Events 中获取Backbone.Events 的“副本”,因为对象总是在JavaScript 中通过引用传递?这意味着对Events 的更改也将适用于Backbone.Events,因为它实际上是同一个对象,但我没有看到任何优势,但也许我在这里错过了什么?也许这只是一条捷径?
var Events = {};
var Backbone.Events = {};
编辑:上面的例子实际上是错误的,我只是因为 Guffa 的回答才意识到这一点。
【问题讨论】:
-
"...因为对象总是在 JavaScript 中通过引用传递?"。是的。作者还定义了一个
Events对象,这样源代码就更干净了。 -
@Vohuman 使用清洁器意味着您只需输入
Events而不是Backbone.Events? -
是的。是好还是坏?答案是“主要基于意见”。
-
“因为对象总是通过引用传递” JavaScript 总是按值传递。对象表示为引用,所以在这种情况下,变量被分配a引用,而不是by引用。这是一个很大的区别,不幸的是太多人会出错。引用传递意味着我可以这样做:
var a = 1; var b = a; a = 2;和b也将是2。但这不是 JavaScript 的工作方式(对于任何值/数据类型)。如需更多信息,请参阅en.wikipedia.org/wiki/Evaluation_strategy。 -
@FelixKling 谢谢,我确实从未听说过!您是否有任何来源可以找到此类内容的正确信息?
标签: javascript backbone.js scope variable-assignment