从 Java 到 Java 脚本的字符串排列

String permutation from Java to Javascript

我是 Javascript 的新手,我试图使用 Javascript 重现 Java 字符串排列,但我无法得到正确的结果。

注意:我在这里遵循了这个算法(Hemant 的回答):String permutation with recursion

这是我的代码:

function getAllPermutations(input){
  var permutations = [];

  function loop(prefix, input){

      var len = input.length;

      if(len==0) {
          permutations.push(prefix);
       }
      else{
      for(i = 0; i < len; i++){
        loop(prefix + input.charAt(i),input.substr(0,i) + input.substr(i+1,len));
       }
      }
     }

  loop("", input);

  return permutations;
}

当我调用 getAllPermutations("good") 时,它只返回 ["good"]。这段代码是怎么回事?我是否遗漏了有关回调范围的任何信息?

问题是for循环中的变量i是全局定义的。因此在每次递归中,变量保留前一次迭代的值。
可以通过在变量前面写 var 来修复它,使其成为局部变量,如以下代码片段所示。

for(var i = 0; i < len; i++){
// ...
}