答案 0 :(得分: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);
};
返回数组部分的浅表副本 [...]
如果省略end
,则将切片提取到序列的末尾。
所以说array.slice(n)
返回array
的浅表副本,从索引n
开始,一直到array
的末尾,因为数组从零开始索引,{{ 1}}制作整个数组的浅表副本。