Javascript排列魔术
我正在阅读一些算法,试图理解javascript中的排列,下面的一个让我大吃一惊Javascript排列魔术,javascript,permutation,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.le
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
}
如果我在代码中的console.log(i)或console.log(ch)之前或之后输入,它将返回undefined where。
如果我去掉i和ch,算法就不再有效了
有人能给我解释一下这句话以及它是如何工作的吗?
非常感谢不需要魔法
声明变量i
、ch
和chars
,并将其赋值给chars
whatinput.split(“”)
返回
基本上相当于
var i; // undefined
var ch; // undefined
var chars = input.split(''); // Array of string
这通常是为在循环迭代中可用的变量而做的(以访问以前的值)
然而。。。
i
只是循环变量,可以像中一样内联声明
for (var i = 0; i < chars.length; i++) {
这使得这个例子确实令人困惑(可以说它写得很糟糕)让你困惑的一行有一个名字:“Javascript多重左手赋值”。您还对
var x='blah'之间的细微差别感到困惑代码>和x='blah'
。有助于解释这种差异的链接:它与在for循环中创建和销毁变量的范围有关,或者与在每次迭代中保持变量的范围有关。要查看这一点,请在循环的每个迭代中打印ch。在循环内部或外部定义ch具有重要意义。非常感谢您的回答,但是,当我删除这两个时,为什么算法不再有效?
var i; // undefined
var ch; // undefined
var chars = input.split(''); // Array of string
for (var i = 0; i < chars.length; i++) {
for (var i = 0; i < chars.length; i++) {
var ch = chars.splice(i, 1);