2012-10-08 61 views
1

在Backbone.js的源代碼(系列 - 「添加」方法)正常參考,有以下行:片VS在Backbone.js的源代碼

add: function(models, options) { 
    ... 
    models = _.isArray(models) ? models.slice() : [models]; 

爲什麼作者讓副本陣列,而不是僅僅

add: function(models, options) { 
    ... 
    models = _.isArray(models) ? models : [models]; 

非常感謝提前
沃爾夫岡

回答

2

它是用來防止意外收集修改通過改變陣列PAS sed集合構造函數在代碼中的其他地方 - 可能看起來不太可能,但如果它發生了,它將成爲調試的噩夢。

由於數組是作爲引用傳遞的 - 在一個地方改變它也會改變集合上的models數組,但是因爲它會在集合邏輯之外發生,集合的長度等不會改變,刪除模型事件不會觸發