you got a dream, you gotta protect it
function add(a, b) {
return a + b;
}
function sub(a, b) {
return a - b;
}
var a1 = add.apply(sub, [4, 2]); // sub调用add的方法, [4, 2]为参数
console.log(a1); // expected output: 6
// 如果想将数组元素迭代为函数参数,一般使用Function.prototype.apply 的方式进行调用。
function myFunction(x, y, z) { }
var args = [0, 1, 2];
myFunction.apply(null, args);
// 有了展开语法,可以这样写:
function myFunction(x, y, z) { }
var args = [0, 1, 2];
myFunction(...args); // ...args 表示的是 args 这个定义的数组中的元素当作了myFunction这个函数的参数
// 所有参数都可以通过展开语法来传值,也不限制多次使用展开语法。
function myFunction(v, w, x, y, z) { }
var args = [0, 1];
myFunction(-1, ...args, 2, ...[3]);
// 没有展开语法的时候,只能组合使用 push, splice, concat 等方法,来将已有数组元素变成新数组的一部分。
// 有了展开语法, 通过字面量方式, 构造新数组会变得更简单、更优雅:
var parts = ['shoulders', 'knees'];
var lyrics = ['head', ...parts, 'and', 'toes'];
// ["head", "shoulders", "knees", "and", "toes"]
// 数组拷贝(copy)
var arr = [1, 2, 3];
var arr2 = [...arr]; // like arr.slice()
arr2.push(4);
// arr2 此时变成 [1, 2, 3, 4]
// arr 不受影响