我想知道这段代码:
var numbers, _ref;
numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
[].splice.apply(numbers, [3, 4].concat(_ref = [-3, -4, -5, -6])), _ref;
alert(numbers);
从这里,结果是[0, 1, 2, -3, -4, -5, -6, 7, 8, 9]
,任何人都可以解释一下吗?
我想知道这段代码:
var numbers, _ref;
numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
[].splice.apply(numbers, [3, 4].concat(_ref = [-3, -4, -5, -6])), _ref;
alert(numbers);
从这里,结果是[0, 1, 2, -3, -4, -5, -6, 7, 8, 9]
,任何人都可以解释一下吗?
您的代码解析为以下变量声明:
var numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
var _ref = [-3, -4, -5, -6];
还有这些表达:
numbers.splice(3, 4, -3, -4, -5, -6);
_ref;
alert(numbers);
function .apply(context, argsArray) 在给定的上下文中调用function,将 argsArray 作为function的参数传递。
在这种情况下,函数is [].splice
,它采用以下参数,按以下顺序:
[3,4].concat(_ref = [-3, -4, -5, -6])
通过将两个数组连接在一起来计算一个数组,给出[3, 4, -3, -4, -5, -6]
. 这是传递给 的 argsArray .apply()
,因此:
因此.apply()
导致.splice()
函数在数组的上下文中运行numbers
,删除索引 3、4、5 和 6 处的元素,然后在“2”和“7”之间插入元素 -3、-4、-5 和 -6在原始数组中。
编辑:请参阅 RobG 的答案以了解原始代码等效的摘要(而不是对其部分的解释)。
[3, 4].concat(_ref = [-3, -4, -5, -6])
evals to[3, 4, -3, -4, -5, -6]
和[].splice.apply(numbers, [3, 4, -3, -4, -5, -6]))
tonumbers.splice(3, 4, -3, -4, -5, -6)
导致从索引 3 开始的 4 个元素被删除,并在索引 3 处插入元素“-3、-4、-5、-6”。参见splice。