js中递归调用时参数是否会改变

发布于 2022-09-04 19:45:34 字数 389 浏览 38 评论 0

如下所示的一个递归函数,为什么args.concat(i)没有根据循环增加?args是一个引用类型,在我的想法中,这个args会在循环时把0-9都放进去。

var loop = (fn, n, args = []) => {
  if (n === 0) {
    return fn.apply(fn, args);
  }
  for (var i = 0; i <= 9; i++) {
    loop(fn, n - 1, args.concat(i)); // 这里的args.concat(i),在递归的每个栈都是“新”的
  }
}
loop((...a) => console.log(a), 2);
//结果: [0,0]  [0,1]  ...

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

国粹 2022-09-11 19:45:34

因为args.concat是返回新的数组,不会影响原来的数组。

内心荒芜 2022-09-11 19:45:34
var loop = (fn, n, args = []) => {
    if (n === 0) {
    return fn.apply(fn, args);
    }
  for (var i = 0; i <= 9; i++) {
    loop(fn, n - 1, args=args.concat(i)); // 这里的args.concat(i),在递归的每个栈都是“新”的
    }
}
loop((...a) => console.log(a), 2);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文