Javascript Permutations魔术技巧

时间:2017-02-06 15:18:29

标签: javascript permutation

我正在阅读一些算法来尝试理解javascript中的排列,而下面的一个让我很震惊

var permArr = [], usedChars = [];
function permute(input) {
  var i, ch, chars = input.split('');
  for (i = 0; i < chars.length; i++) {
    ch = chars.splice(i, 1);
    usedChars.push(ch);
    if (chars.length == 0) permArr[permArr.length] = usedChars.join('');
    permute(chars.join(""));
    chars.splice(i, 0, ch);
    usedChars.pop();
  }
  return permArr
}

仅供参考我在以下网站上找到了此算法:http://staff.roguecc.edu/JMiller/JavaScript/permute.html

我可以看到这个算法有效,但有一条线让我感到困惑,我找不到它工作的任何地方

var i, ch, chars = input.split("");

如果我在代码之前或之后的console.log(i)或console.log(ch),它返回undefined无处不在。 如果我删除i和ch,则算法不再起作用。

有人能解释一下这条线及其运作方式吗? 非常感谢

1 个答案:

答案 0 :(得分:3)

没有魔法参与

var i, ch, chars = input.split('');

声明变量ichchars并分配给chars input.split('')返回的内容。

基本上相当于

var i; // undefined
var ch; // undefined
var chars = input.split(''); // Array of string

这通常是为了使循环迭代中的变量可用(以访问先前的值)。

然而...

i只是循环变量,可以在

中内联声明
for (var i = 0; i < chars.length; i++) {

ch可以存在于循环中,因为无论如何它都会在第一个语句中重新分配

  for (var i = 0; i < chars.length; i++) {
      var ch = chars.splice(i, 1);

这使得这个例子确实令人困惑(可以说它的写得不好)