我正在阅读一些算法来尝试理解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,则算法不再起作用。
有人能解释一下这条线及其运作方式吗? 非常感谢
答案 0 :(得分:3)
var i, ch, chars = input.split('');
声明变量i
,ch
和chars
并分配给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);
这使得这个例子确实令人困惑(可以说它的写得不好)