啊?在js 中foreach内加return 不影响函数的执行

72 阅读1分钟

遇到一个问题,在js函数内使用foreach的时候内部加return fnfn执行效果是一样的?不是很明白,求助。

下面是我的两段代码

  1. 参数 a和b
  a: [
    {
      name: 'a',
      num: 0,
      children: [
        {
          name: 'b',
          num: 0,
          children: [
            {
              name: 'c',
              num: 0
            },
            {
              name: 'd',
              num: 0,
              children: [
                {
                  name: 'e',
                  num: 0
                },
                {
                  name: 'f',
                  num: 0
                }
              ]
            }
          ]
        },
        {
          name: 'g',
          num: 0,
          children: [
            {
              name: 's',
              num: 0
            }
          ]
        }
      ]
    },
    {
      name: 'n',
      num: 0,
      children: [
        {
          name: 'm',
          num: 15
        }
      ]
    }
  ],
  b: [
    {
      name: "a",
      num: 1
    },
    {
      name: "c",
      num: 2
    },
    {
      name: "e",
      num: 2
    },
    {
      name: 's',
      num: 10
    }
  ]
          
  1. 加return的
fn(a, b) {
  a.forEach(item => {
    b.forEach(dataItem => {
      if (dataItem.name === item.name) {
        item.num = dataItem.num;
      }
    });
    if (item.children && item.children.length) {
      //加return
      return this.fn(item.children, b);
    }
  })
  return a;
}
  1. 不加return的
fn(a, b) {
  a.forEach(item => {
    b.forEach(dataItem => {
      if (dataItem.name === item.name) {
        item.num = dataItem.num;
      }
    });
    if (item.children && item.children.length) {
        //不加return
       this.fn(item.children, b);
    }
  })
  return a;
}
  1. 最终执行结果是一样的
[
    {
        "name": "a",
        "num": 1,
        "children": [
            {
                "name": "b",
                "num": 0,
                "children": [
                    {
                        "name": "c",
                        "num": 2
                    },
                    {
                        "name": "d",
                        "num": 0,
                        "children": [
                            {
                                "name": "e",
                                "num": 2
                            },
                            {
                                "name": "f",
                                "num": 0
                            }
                        ]
                    }
                ]
            },
            {
                "name": "g",
                "num": 0,
                "children": [
                    {
                        "name": "s",
                        "num": 10
                    }
                ]
            }
        ]
    }
]