国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

從一個詭異的bug發現js變量作用域問題

VishKozus / 3033人閱讀

摘要:分支分支以上代碼產生了一個表面上看起來會很詭異的問題,就是如果的分支情況下,有時候會導致外層的循環回頭,即明明最外層已經循環到的最后一個了,跑完分支之后,外層循環又回頭執行。

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 專題之惰性函數 JavaScript 專題系列第十五篇,講解惰性函數 需求 我們現在需要寫一個 foo 函數,這個函數返回首次調用時的 Date 對象,注意...

    Benedict Evans 評論0 收藏0
  • 前端編碼規范

    摘要:去掉無用的代碼使用主動語態避免一連串松散結構的代碼邏輯把相關的變量函數放在一起。該處代碼運行正常,但可能由于時間趕或者其他原因,需要修正。此時需要對思路或詭異手段進行描述。 命名規范 變量名, 函數名 小駝峰【命名法 camel Case】: numberOfPeople 第一個單詞的首字母小寫;第二個單詞開始每個單詞的的首字母大寫 組件名 大駝峰【命名法 Camel Case】: ...

    YJNldm 評論0 收藏0
  • PHP 一個詭異加法算法研究

    摘要:然而實際上,這個結果反而是正確的。結論我認為出現這種詭異的結果應該算是的,同時,這也說明了此種問題不太容易被發現和暴露,這要求我們平常寫代碼的時候盡量使用常用的語法,和精干的語句,讓代碼和邏輯達到最佳的平衡點。 前言 之前我在面試的時候,遇到許多年輕人都聲稱自己精通php,有過許多項目經驗等等。然而,當真正筆試的時候,我問到 $result=1; if(-1){ $result=2;...

    gekylin 評論0 收藏0
  • vue總結系列--組件化

    摘要:觸發事件可以攜帶數據,這些數據被用于傳遞給綁定了事件的其它組件的回調函數上,進而被傳遞給其它組件。父組件可以在回調函數里做任何事情,頗有靈活性。一般情況下,父組件會在回調函數中更新自己的狀態數據。 上一篇博文梳理了vue的數據驅動和響應式相關的特性,這一篇博文就來梳理vue的一個很重要的特性,組件化。自定義組件之于vue,其意義不亞于函數之于C,java之類的編程語言。函數是計算機科學...

    cuieney 評論0 收藏0
  • js作用和this理解

    摘要:總結總而言之,作用域在語法分析時就已經處理完啦,的作用域是靜態作用域,在運行時只是上下文對象在一直發生變化。 JavaScript 的作用域和上下文對象this 從幾個有意思的js問題開始 為什么輸出的不是f2? `var scope = top; var f1 = function() { console.log(scope); }; f1(); //...

    李文鵬 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<