我需要解释这个简短的脚本

时间:2014-03-29 11:39:31

标签: javascript function recursion

我有这段代码:

    function list(target, letters, lvls) {
    var index = 0;
    (function iter(s, lvl) {
        if(lvl++ == lvls)
            return target.appendChild(document.createTextNode(
                ++index + ' - ' + s + '\n'
            ));
        for(var i=0; i<letters.length; ++i)
            iter(s + letters[i], lvl);
    })('', 0);
  }
  list(document.getElementById('output'), 'abc', 3);

但我不知道这种类型的函数语法。 有人可以向我解释函数行为以及这段代码的确切步骤。 并提前感谢

1 个答案:

答案 0 :(得分:0)

这似乎在遍历字符串&#39; abc&#39;并使用字符串中所有字符的组合创建尽可能多的X字母字符串。

所以通话是list([element ID to output strings], [string of all possible letters], [size of strings to generate])

以下示例 -

<script type="text/javascript">
function list(target, letters, lvls) {
    var index = 0;
    (function iter(s, lvl) {
        if(lvl++ == lvls)
            return target.appendChild(document.createTextNode(
                ++index + ' - ' + s + '\n'
            ));
        for(var i=0; i<letters.length; ++i)
            iter(s + letters[i], lvl);
    })('', 0);
}
list(document.getElementById('output'), 'ab', 2);
</script>

<div id="output"></div>

将使用输入字符串(param 2)中的字符输出所有可能的两个字母字符串(由参数3定义),并将导致 -

1 - aa 2 - ab 3 - ba 4 - bb

<强>解释

在方法内部,第二个名为iter,其参数为slvls。上 首次运行时,解析为iter方法的参数为空白和0.它命中了for 运行循环,直到字符串letters中的所有字母都用完为止, 每次递归调用iter方法。每次添加当前字母 迭代s,以及字符串letters[i]中的下一个字母。每一次 以递归方式调用自身,它会构建字符串,直到指定级别的数量为止 已达到该特定字符串,然后返回结果以及index 值。这只是表示字符串计数的数值。