-
callee
是arguments
的一个属性,是一个指针指向拥有这个 arguments 对象的函数(arguments 用于保存函数参数,是一个类数组对象,不具备数组的一般方法)。function test() { console.log(arguments.callee) } test()
执行结果:
ƒ test() { console.log(arguments.callee) }
-
通过 callee 的特性可以用于处理递归操作
正常情况:
function test(num) { if (!(num <= 1)) { return num * test(num-1) } else { return 1 } } console.log(test(10)) // 3628800
通过 callee:
function test(num) { if (!(num <= 1)) { return num * argument.callee(num-1) } else { return 1 } } console.log(test(10)) // 3628800
… 运算符
...
可以作为参数使用,也可以作为扩展运算符使用。
-
作为参数时
可用来取代 arguments 但比 arguments 更加灵活(可遍历),
...
只能放在 最后 作为形参参数,可获取传入的参数未匹配的部分,以数组的形式返回。例如:
function test(a, b, ...arg) { console.log(arg) } test(1,3,5,6,7,8,9) // 执行结果:[5, 6, 7, 8, 9]
-
作为扩展运算符
作为扩展运算符时,可用在 数组 或 对象 中。
let arr = [1,3,5,7,9] console.log(arr) // 以参数序列的形式将其返回 console.log(...arr)
执行结果:
[1, 3, 5, 7, 9] 1 3 5 7 9
可方便的合并数组和对象
数组
let arr1 = [1,3,5,7,9], arr2 = [2, 4, 6, 8] let arr3 = [...arr2, ...arr1] console.log(arr3) // 执行人结果:[2, 4, 6, 8, 1, 3, 5, 7, 9]
对象
let obj1 = { name: "金莲", gender: "女" } let obj2 = {...obj1, age: 22, hobby: "古筝"} console.log(obj2) // 执行结果:{name: "金莲", gender: "女", age: 22, hobby: "古筝"}