摘要:分支分支以上代碼產生了一個表面上看起來會很詭異的問題,就是如果的分支情況下,有時候會導致外層的循環回頭,即明明最外層已經循環到的最后一個了,跑完分支之后,外層循環又回頭執行。
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或者只針對解決上述問題,不必糾結作用域問題的話,我用了更low一些但可以解決問題的,那就是分支2就不用i,換成j一樣可行。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/95199.html
摘要:為此決定自研一個富文本編輯器。例如當要轉化的對象有環存在時子節點屬性賦值了父節點的引用,為了關于函數式編程的思考作者李英杰,美團金融前端團隊成員。只有正確使用作用域,才能使用優秀的設計模式,幫助你規避副作用。 JavaScript 專題之惰性函數 JavaScript 專題系列第十五篇,講解惰性函數 需求 我們現在需要寫一個 foo 函數,這個函數返回首次調用時的 Date 對象,注意...
摘要:然而實際上,這個結果反而是正確的。結論我認為出現這種詭異的結果應該算是的,同時,這也說明了此種問題不太容易被發現和暴露,這要求我們平常寫代碼的時候盡量使用常用的語法,和精干的語句,讓代碼和邏輯達到最佳的平衡點。 前言 之前我在面試的時候,遇到許多年輕人都聲稱自己精通php,有過許多項目經驗等等。然而,當真正筆試的時候,我問到 $result=1; if(-1){ $result=2;...
摘要:觸發事件可以攜帶數據,這些數據被用于傳遞給綁定了事件的其它組件的回調函數上,進而被傳遞給其它組件。父組件可以在回調函數里做任何事情,頗有靈活性。一般情況下,父組件會在回調函數中更新自己的狀態數據。 上一篇博文梳理了vue的數據驅動和響應式相關的特性,這一篇博文就來梳理vue的一個很重要的特性,組件化。自定義組件之于vue,其意義不亞于函數之于C,java之類的編程語言。函數是計算機科學...
摘要:總結總而言之,作用域在語法分析時就已經處理完啦,的作用域是靜態作用域,在運行時只是上下文對象在一直發生變化。 JavaScript 的作用域和上下文對象this 從幾個有意思的js問題開始 為什么輸出的不是f2? `var scope = top; var f1 = function() { console.log(scope); }; f1(); //...
閱讀 1972·2021-11-23 10:03
閱讀 4130·2021-11-22 09:34
閱讀 2466·2021-10-08 10:05
閱讀 2247·2019-08-30 15:53
閱讀 1686·2019-08-30 13:56
閱讀 1149·2019-08-29 16:52
閱讀 1102·2019-08-26 13:31
閱讀 3346·2019-08-26 11:45