【发布时间】:2017-02-06 15:18:28
【问题描述】:
我正在阅读一些算法来尝试理解 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("");
如果代码中的 i console.log(i) 或 console.log(ch) 之前或之后,它会在任何地方返回 undefined。 如果我删除 i 和 ch,算法将不再起作用。
谁能解释一下这条线以及它是如何工作的? 非常感谢
【问题讨论】:
-
让你感到困惑的那一行有一个名字:“Javascript 多重左手赋值”。您还对
var x = 'blah';和x = 'blah'之间的细微差别感到困惑。有用的链接来解释这种差异:stackoverflow.com/a/1471738/445131 它与在 for 循环内创建和销毁的变量的范围有关,或者在每次迭代中持续存在。要看到这一点,请在循环的每次迭代中打印出 ch。在循环内部或外部定义 ch 具有重要意义。