for (var i = 0; child && i < child.length; i++) {
var obj = child[i];
var kind = child[i].kind;
var deiveId = child[i].id;
if (kind == "4") {//分支1
// do sometjing
}else{//分支2
for(i in arr){
//do something
}
}
以上代碼產生了一個表面上看起來會很詭異的題目,就是假如kind!=4的分支2情況下,有時刻會致使外層的for輪迴轉頭,即:明顯最外層已輪迴到child的末了一個了,跑完分支2以後,外層for輪迴又轉頭實行。
緣由剖析:
我想專業人士不像我這麼渣的話會發現題目在變量i,此處i並不會成為塊級變量,而是函數級,分支2中的i變化會致使外層i變化,從而致使輪迴轉頭。
js在ES6之前沒有塊級作用域,只分為全局作用域和函數級作用域,此處i為函數級作用域,而我們用它做輪迴索引的時刻實際上是想看成塊級作用域運用。
處理辦法
想要到達塊級作用域結果能夠運用ES6語法的let關鍵字完成:
for(let i=0;i<arr.length;i++){
}
或許只針對處理上述題目,沒必要糾結作用域題目的話,我用了更low一些但能夠處理題目的,那就是分支2就不必i,換成j一樣可行。