求解这里的side(arguments)里面的arguments的c为什么没有被改变还是1
直接使用 a, b, c 类似 ES6
解构语法,解构出常量值后,你修改 arguments
肯定不会影响常量
function side(arr) {
arr[0] = arr[2];
}
function a(a, b, c = 3) {
arguments[2] = 10;
side(arguments);
return [...arguments].reduce((v, t) => v + t, 0);
}
arguments
是一个对应于传递给函数的参数的类数组对象。指的是传递给函数的参数,你这里并没有去修改arguments
的值,所以arguments
并没有改变,比如你要改arguments 里 c
的值,可以这样
arguments[2] = 10;
详情可以看下MDN里 arguments
的解释。
10 回答11.7k 阅读
2 回答3.2k 阅读✓ 已解决
2 回答4.2k 阅读✓ 已解决
4 回答4.6k 阅读✓ 已解决
3 回答1.6k 阅读✓ 已解决
3 回答2.7k 阅读✓ 已解决
4 回答2.1k 阅读✓ 已解决
在非严格模式下,函数的arguments和当前函数定义的形参存在映射关系,一个变另外一个也变
在严格模式下,函数的arguments和当前函数定义的形参没有映射关系,并且禁止使用arguments.callee和arguments.callee.caller
你的a函数使用了es6的语法,为函数参数指定默认值,所以环境默认开启了严格默认,如果你把这个写法去掉,你会发现结果就是预期的了