2014-03-29 71 views
0

我有這樣的代碼:我需要一個解釋這個簡短的腳本

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); 

但我不知道這種類型的函數語法。 有人可以向我解釋函數行爲,以及這些代碼的準確步驟。 並提前致謝

+0

這是定義[封閉](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Closures),然後執行它 –

回答

0

這似乎是遍歷字符串'abc',並創建儘可能多的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> 

將輸出所有可能的兩個字母串(由參數3所定義的),使用從輸入字符串中的字符(參數2)並會導致 -

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

說明

該方法內部有第二個被稱爲iter的參數slvls。在 第一次運行時,解析爲iter方法的參數爲空白,並且爲0。它的循環運行爲 ,直到字符串letters中的所有字母都用完爲止,每次遞歸調用iter方法時爲 。每次將 迭代s中的當前字母與字符串letters[i]中的下一個字母一起添加。每次 遞歸調用它自己時,它會建立字符串,直到達到指定級別的數目 爲該特定字符串,然後返回結果以及index 值。這只是一個表示字符串數量的數字值。

+0

是的,我知道這個代碼的主要目標是什麼:但我想逐步理解這個腳本如何循環和變量舀取以實現這些結果! – HCJPS

+0

@HCJPS我已經更新了我的答案,包括一個解釋。我希望這對你有意義。它基本上利用遞歸策略來遍歷字符串多次以產生期望的結果。 – Chris

+0

感謝ypur的努力,我明白了^^ – HCJPS