SOURCE

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 命令行工具 X clear

                    
>
console