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