2013-02-19 42 views

回答

3

fine manual

數組分片和剪接與範圍

範圍也可用於提取陣列的切片。有兩個點(3..6),範圍是包含的(3, 4, 5, 6);有三個點(3...6),範圍不包括結尾(3, 4, 5)。切片索引具有有用的默認值。省略的第一個索引默認爲零,省略的第二個索引默認爲數組大小。

說着array[..]是簡寫:

len = array.length 
array[0 .. len] 

而只是使得array淺拷貝。這意味着args = args[..]只是使args的本地淺表副本,以便args可以在不更改傳入的原始數組的情況下進行操作和更改,並且您可以存儲對數組的引用,而函數的調用者無法通過原始args傳遞給該函數的引用。

考慮該簡化的例子:

f = (args) -> args = args[..] 

變成該JavaScript:

var f; 

f = function(args) { 
    return args = args.slice(0); 
}; 

而且Array#slice

返回一個陣列的一部分的淺表副本。
[...]
如果省略了end,則片段提取到序列的末尾。

說着array.slice(n)返回了從指數narray淺拷貝和去的array末因爲數組被索引從零開始,array.slice(0)使得整個陣列的淺表副本。