使用方式:...要展开的东西
展开运算符可以作用于可迭代对象,这样,就可以轻松的将可迭代对象转换为数组。
可以用于展开数组与对象,数组展开es6 对象展开es7
arr = [1,2,3,4,5,6]
console.log(arr)
console.log(...arr + '数组展开')
obj = {
name: '张三',
age:"15",
}
let obj1 = {
...obj
}
console.log(obj)
console.log(obj1)
console.log(obj === obj1)
控制台效果
但是,当进行深度克隆时需要深入展开,才能实现深度克隆,否则只能浅度克隆
**
使用剩余参数与展开运算符实现函数柯里化
柯里化函数
function curry(func, ...args) {
return function(...subArgs) {
const allArgs = [...args, ...subArgs];
if (allArgs.length >= func.length) {
//参数够了
return func(...allArgs);
} else {
//参数不够,继续固定
return curry(func, ...allArgs);
}
}
}
示例
function cal(a, b, c, d) {
return a + b * c - d;
}
//curry:柯里化,用户固定某个函数的前面的参数,得到一个新的函数,新的函数调用时,接收剩余的参数
function curry(func, ...args) {
return function(...subArgs) {
const allArgs = [...args, ...subArgs];
if (allArgs.length >= func.length) {
//参数够了
return func(...allArgs);
} else {
//参数不够,继续固定
return curry(func, ...allArgs);
}
}
}
const newCal = curry(cal, 1, 2)
console.log(newCal(3, 4)) // 1+2*3-4
console.log(newCal(4, 5)) // 1+2*4-5
console.log(newCal(5, 6)) // 1+2*5-6
console.log(newCal(6, 7)) // 1+2*6-7
const newCal2 = newCal(8)
console.log(newCal2(9)); // 1+2*8-9