2017-09-12 32 views
-1

任何人都可以解釋我爲什麼這個代碼產生不同的結果:JS assing結果變量的變化它的價值

var nav \t \t = document.getElementById('nav').childNodes, 
 
\t navItem = [], 
 
\t i=0, 
 
\t navLenght = nav.length, 
 
\t navItemLenght = navItem.length, 
 
\t navItemWidth = 100/navItemLenght; 
 

 
for (i = 0; i<navLenght; i++) { 
 
\t if (hasClass(nav[i], 'level0')) { 
 
\t \t navItem.push(nav[i]); 
 
\t } 
 
} 
 

 
function hasClass(element, className) { 
 
    return element.className && new RegExp("(^|\\s)" + className + "(\\s|$)").test(element.className); 
 
} 
 

 
for (i = 0; i<navLenght;i++) { 
 
\t //navItem[i].style.with = 100/navItem.length; 
 
} 
 

 
console.log(navItemLenght); // 0 
 
console.log(navItem.length); //6
<div id='nav'> 
 
    <li class="level0">...</li> 
 
    <li class="level0">...</li> 
 
    <li class="level0">...</li> 
 
    <li class="level0">...</li> 
 
    <li class="level0">...</li> 
 
    <li class="level0">...</li> 
 
</div>

當我assing結果它的變化的變量,爲什麼?

我更新代碼,或許這樣更清晰

+0

**注:**我包裝了代碼並添加了HTML以便代碼運行。這不是原始代碼的一部分。 @oootramas,如果有關於編輯的任何錯誤,請回復它 – Rajesh

+0

你將如何獲得第二次colsole.log調用6?更詳細地解釋。 –

+0

我想你的意思是'navItemLenght = nav.length'不是? –

回答

0

navLength = navItem.lenght在開始執行。 該表達式使得navLength等於navItem.length計算的結果,即0.

直到您使用 navLength = navItem.lenght再次分配navLength不會改變。變量和數組長度不會自動連接。

0

因爲你永遠不更新其與navItem.length這是當時空初始化navItemLenght。 (你剛剛將其設置爲navItem = []