首頁  >  文章  >  web前端  >  使用js變數作用域遇到的bug

使用js變數作用域遇到的bug

php中世界最好的语言
php中世界最好的语言原創
2018-05-24 15:57:131819瀏覽
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++){
}

相信看了本文案例你已經掌握了方法,更多精彩請關注php中文網其它相關文章!

推薦閱讀:

css常用樣式總結

#Component與PureComponent使用區別詳解


#

以上是使用js變數作用域遇到的bug的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn