2013-02-19 108 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)使得整个阵列的浅表副本。