遇到一个问题,在js函数内使用foreach的时候内部加return fn和fn执行效果是一样的?不是很明白,求助。
下面是我的两段代码
- 参数 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
}
]
- 加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;
}
- 不加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;
}
- 最终执行结果是一样的
[
{
"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
}
]
}
]
}
]