console.log(1,2,3,4)
// # 知识点一,arguments对象是所有(非箭头)函数中都可用的局部变量
a = () => {
console.log(arguments)
}
function b(a, b) {
console.log(arguments)
}
// # 获取 function 参数数量
console.log(b.length)
// # arguments[@@iterator] 与函数的实际形参之间共享
function swap() {
arguments[0] = arguments[2]
}
function test(a, b, c) {
c = 10
console.log(arguments)
swap(arguments)
return a + b + c
}
console.log(test(1,1,1))
// # 当非严格模式中的函数有包含剩余参数、默认参数和解构赋值
// # 那么arguments对象中的值不会跟踪参数的值(反之亦然)。相反, arguments反映了调用时提供的参数:
function func(a = 55) {
arguments[0] = 99; // updating arguments[0] does not also update a
console.log(a);
}
func(10); // 10
// # 并且
function func(a = 55) {
a = 99; // updating a does not also update arguments[0]
console.log(arguments[0]);
}
func(10); // 10
function func(a = 55) {
console.log(arguments[0]);
}
func(); // undefined
// # 注意: 在严格模式下,arguments对象已与过往不同。
// # arguments[@@iterator] 不再与函数的实际形参之间共享
// # 同时caller属性也被移除。
console