arguments:
arguments 是一个对应于传递给函数的参数的类数组对象。
下列代码输出结果:
function side(arr) {
arr[0] = arr[2];
}
function a(a, b, c = 3) {
c = 10;
side(arguments); // 此时的arguments参数a为1,b为1,c为1
return a + b + c;
}
console.log(a(1, 1, 1)) // 12
解析:
当非严格模式中的函数有包含剩余参数、默认参数和解构赋值,那么arguments对象中的值不会跟踪参数的值(反之亦然)。
1 . 当函数a 中默认参数 c = 3 时,arguments对象中的值不会跟踪参数的值
此时 arguments 接收的参数为 [1,1,1]
那么当函数side执行后,a的值为1;
最终输出结果就为 12
2 . 若当函数a 中形参未接收默认参数时,那么arguments对象将会跟踪参数的值,此时 arguments 接收的参数为 [1,1,10]
那么当函数side执行后,a的值为10;
最终输出结果就为 21