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

查看:262
本文介绍了javascript - js中递归调用时参数是否会改变的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

如下所示的一个递归函数,为什么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]  ...

解决方案

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

这篇关于javascript - js中递归调用时参数是否会改变的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆