记录一道笔试题
function side(arr) {
arr[0] = arr[2];
}
function func1(a, b, c = 3) {
c = 10;
side(arguments);
console.log(a + b + c);
}
function func2(a, b, c) {
c = 10;
side(arguments);
console.log(a + b + c);
}
func1(1, 1, 1); // 12 a:1, b:1, c:10,不共享,所以arguments与abc没有关系,所以改了arguments,a还是1
func2(1, 1, 1); // 21 a:10, b:1, c:10,共享,所以改了arguments,a的值也改动了
原因在于 func1
给了 c
默认值,进入了严格模式,而严格模式下实参和 arguments
是不会共享的。
参考资料