没有显式设置变量javascript的递归

时间:2014-11-02 06:13:16

标签: javascript recursion

以下是两个具有相同递归函数的工作版本(对于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如何在没有显式设置结果变量的情况下工作?

1 个答案:

答案 0 :(得分:1)

result.push(key)result.sort()都修改了作为参数传入的result数组。所以不需要在调用者中再次分配它。