2013-01-23 40 views
1

第六章有關於的forEach和地圖無限循環,當我學習eloquentjavascript

我的英語很差,所以我貼我的實踐代碼不能詳細描述了問題:HTTP://jsbin.com/exusox/ 3 /編輯

當你單擊butten時有無盡的循環。

我測試過我的代碼,我發現這個代碼的無限循環:

function extractFootnotes(paragraphs){ 
    var footnotes=[],currentNum=0; 
    function dealWithFootnote(fragment){ 
     if(fragment.type=="footnote"){ 
     currentNum++; 
     fragment.number=currentNum; 
     footnotes.push(fragment); 
     return {type:"reference",number:currentNum}; 
     } 
     else{ 
     return fragment; 
     } 
    } 
    //run here ,endless loop happened.I've tested forEach,the i++ can't work. 
    forEach(paragraphs,function(paragraph){ 
     paragraph.content=map(dealWithFootnote,paragraph.content); 
    }); 

    return footnotes; 
    } 


    function forEach(array,action){ 
    for(i=0;i<array.length;i++) 
     action(array[i]); 
    } 

    function map(func,array){ 
    var result=[]; 
    forEach(array,function(element){ 
     result.push(func(element)); 
    }); 
    return result; 
    } 

爲什麼出現這種情況,我怎樣才能減少我的代碼感謝?

My Practice Code

回答

1

的變量 「i」 在你的 「的forEach」 函數是一個全局變量。你應該var聲明它:

function forEach(array, action) { 
    var i; 
    // ... etc 
} 

因此,當一個呼叫「的forEach」涉及將自稱爲「的forEach」,同樣的變量「i」將被重置的動作。

這是一個好主意,把這個在你的代碼的頂部:

"use strict"; 

這告訴解釋一些新的規則適用於代碼,它會告訴你這樣的一個錯誤。

+0

謝謝!這可以解決所有問題。 – user1573365