以下是两个具有相同递归函数的工作版本(对于Node.js)。
版本1
function getDependencies(mod, result) {
result = result || []
var dependencies = mod.dependencies || []
Object.keys(dependencies).forEach(function(dep) {
var key = dep + '@' + mod.dependencies[dep].version
if (result.indexOf(key) === -1) result.push(key)
getDependencies(mod.dependencies[dep], result) // COMPARE THIS LINE
})
return result.sort()
}
版本2
function getDependencies(mod, result) {
result = result || []
var dependencies = mod.dependencies || []
Object.keys(dependencies).forEach(function(dep) {
var key = dep + '@' + mod.dependencies[dep].version
if (result.indexOf(key) === -1) result.push(key)
result = getDependencies(mod.dependencies[dep], result) // COMPARE THIS LINE
})
return result.sort()
}
与版本2相比,该函数的版本1如何在没有显式设置结果变量的情况下工作?
答案 0 :(得分:1)
result.push(key)
和result.sort()
都修改了作为参数传入的result
数组。所以不需要在调用者中再次分配它。