摘要:分支分支以上代碼產(chǎn)生了一個(gè)表面上看起來(lái)會(huì)很詭異的問(wèn)題,就是如果的分支情況下,有時(shí)候會(huì)導(dǎo)致外層的循環(huán)回頭,即明明最外層已經(jīng)循環(huán)到的最后一個(gè)了,跑完分支之后,外層循環(huán)又回頭執(zhí)行。
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 } }
以上代碼產(chǎn)生了一個(gè)表面上看起來(lái)會(huì)很詭異的問(wèn)題,就是如果kind!=4的分支2情況下,有時(shí)候會(huì)導(dǎo)致外層的for循環(huán)回頭,即:明明最外層已經(jīng)循環(huán)到child的最后一個(gè)了,跑完分支2之后,外層for循環(huán)又回頭執(zhí)行。
原因分析:
我想專(zhuān)業(yè)人士不像我這么渣的話會(huì)發(fā)現(xiàn)問(wèn)題在變量i,此處i并不會(huì)成為塊級(jí)變量,而是函數(shù)級(jí),分支2中的i變化會(huì)導(dǎo)致外層i變化,從而導(dǎo)致循環(huán)回頭。
js在ES6之前沒(méi)有塊級(jí)作用域,只分為全局作用域和函數(shù)級(jí)作用域,此處i為函數(shù)級(jí)作用域,而我們用它做循環(huán)索引的時(shí)候其實(shí)是想當(dāng)作塊級(jí)作用域使用。
解決辦法
想要達(dá)到塊級(jí)作用域效果可以使用ES6語(yǔ)法的let關(guān)鍵字實(shí)現(xiàn):
for(let i=0;i或者只針對(duì)解決上述問(wèn)題,不必糾結(jié)作用域問(wèn)題的話,我用了更low一些但可以解決問(wèn)題的,那就是分支2就不用i,換成j一樣可行。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/95199.html
摘要:為此決定自研一個(gè)富文本編輯器。例如當(dāng)要轉(zhuǎn)化的對(duì)象有環(huán)存在時(shí)子節(jié)點(diǎn)屬性賦值了父節(jié)點(diǎn)的引用,為了關(guān)于函數(shù)式編程的思考作者李英杰,美團(tuán)金融前端團(tuán)隊(duì)成員。只有正確使用作用域,才能使用優(yōu)秀的設(shè)計(jì)模式,幫助你規(guī)避副作用。 JavaScript 專(zhuān)題之惰性函數(shù) JavaScript 專(zhuān)題系列第十五篇,講解惰性函數(shù) 需求 我們現(xiàn)在需要寫(xiě)一個(gè) foo 函數(shù),這個(gè)函數(shù)返回首次調(diào)用時(shí)的 Date 對(duì)象,注意...
摘要:去掉無(wú)用的代碼使用主動(dòng)語(yǔ)態(tài)避免一連串松散結(jié)構(gòu)的代碼邏輯把相關(guān)的變量函數(shù)放在一起。該處代碼運(yùn)行正常,但可能由于時(shí)間趕或者其他原因,需要修正。此時(shí)需要對(duì)思路或詭異手段進(jìn)行描述。 命名規(guī)范 變量名, 函數(shù)名 小駝峰【命名法 camel Case】: numberOfPeople 第一個(gè)單詞的首字母小寫(xiě);第二個(gè)單詞開(kāi)始每個(gè)單詞的的首字母大寫(xiě) 組件名 大駝峰【命名法 Camel Case】: ...
摘要:然而實(shí)際上,這個(gè)結(jié)果反而是正確的。結(jié)論我認(rèn)為出現(xiàn)這種詭異的結(jié)果應(yīng)該算是的,同時(shí),這也說(shuō)明了此種問(wèn)題不太容易被發(fā)現(xiàn)和暴露,這要求我們平常寫(xiě)代碼的時(shí)候盡量使用常用的語(yǔ)法,和精干的語(yǔ)句,讓代碼和邏輯達(dá)到最佳的平衡點(diǎn)。 前言 之前我在面試的時(shí)候,遇到許多年輕人都聲稱(chēng)自己精通php,有過(guò)許多項(xiàng)目經(jīng)驗(yàn)等等。然而,當(dāng)真正筆試的時(shí)候,我問(wèn)到 $result=1; if(-1){ $result=2;...
摘要:觸發(fā)事件可以攜帶數(shù)據(jù),這些數(shù)據(jù)被用于傳遞給綁定了事件的其它組件的回調(diào)函數(shù)上,進(jìn)而被傳遞給其它組件。父組件可以在回調(diào)函數(shù)里做任何事情,頗有靈活性。一般情況下,父組件會(huì)在回調(diào)函數(shù)中更新自己的狀態(tài)數(shù)據(jù)。 上一篇博文梳理了vue的數(shù)據(jù)驅(qū)動(dòng)和響應(yīng)式相關(guān)的特性,這一篇博文就來(lái)梳理vue的一個(gè)很重要的特性,組件化。自定義組件之于vue,其意義不亞于函數(shù)之于C,java之類(lèi)的編程語(yǔ)言。函數(shù)是計(jì)算機(jī)科學(xué)...
摘要:總結(jié)總而言之,作用域在語(yǔ)法分析時(shí)就已經(jīng)處理完啦,的作用域是靜態(tài)作用域,在運(yùn)行時(shí)只是上下文對(duì)象在一直發(fā)生變化。 JavaScript 的作用域和上下文對(duì)象this 從幾個(gè)有意思的js問(wèn)題開(kāi)始 為什么輸出的不是f2? `var scope = top; var f1 = function() { console.log(scope); }; f1(); //...
閱讀 2057·2021-11-23 10:03
閱讀 4759·2021-11-22 09:34
閱讀 2583·2021-10-08 10:05
閱讀 2309·2019-08-30 15:53
閱讀 1755·2019-08-30 13:56
閱讀 1217·2019-08-29 16:52
閱讀 1196·2019-08-26 13:31
閱讀 3404·2019-08-26 11:45