2017-09-28 57 views
1

在我的頁面上,我使用javascript<div>元素添加到頁面。內容和數量來自服務器上文件夾的內容。該頁面有許多列,我想將每個新增加到最小的列。我創建了這個函數來確定哪一列是最小的。當在單個請求上運行/測試時,該功能按預期工作。當我在需要添加的元素的「for-loop」內部調用函數時,它會無限期地運行?Javascript函數無限期地在for循環中運行

爲環是

for(i = 0; i < importedElement.length; i++){} 

功能是

function findSmallestColumn() { 
    var columns = document.getElementById("container").children; 
    var columnsHeight = []; 
    for (i = 0; i < numberOfColumns; i++) { 
     columnsHeight[i] = columns[i].offsetHeight; 
    } 
    var min = Math.min(...columnsHeight); 
    var minIndex = columnsHeight.indexOf(min) + 1; 
    return minIndex; 
} 

*的「numberOfColumns是附有數字的變種。

+3

你已經忘記了'i'的兩個定義中的'var'(或'let').. – thebjorn

回答

3

你有內部的第二for循環您函數,它無限增加i。將i替換爲j或任何其他變量名稱for循環,它將按預期工作。

如果您使用let關鍵字在for循環內本地聲明它們,則可以使用相同的變量名i,該關鍵字僅在當前塊中聲明變量。

+2

原因是JavaScript中的變量被限定爲函數。 for循環不提供新的範圍。它應該工作,如果你重新聲明函數內的變量我。 – 4thex

+0

非常感謝!現在很清楚,但幾個小時以來,我一直在盯着我。 –

+0

這個問題是你爲什麼總是使用[嚴格模式](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Strict_mode)的一個很好的例子,如果你忘記了聲明一個變量,併爲你節省那些時間的沮喪。使用棉絨也有助於解決這類錯誤。 –