js arguments问题

image.png

求解这里的side(arguments)里面的arguments的c为什么没有被改变还是1

阅读 2.4k
3 个回答

在非严格模式下,函数的arguments和当前函数定义的形参存在映射关系,一个变另外一个也变

在严格模式下,函数的arguments和当前函数定义的形参没有映射关系,并且禁止使用arguments.callee和arguments.callee.caller

你的a函数使用了es6的语法,为函数参数指定默认值,所以环境默认开启了严格默认,如果你把这个写法去掉,你会发现结果就是预期的了

直接使用 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;

image.png

详情可以看下MDNarguments 的解释。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题