亚洲精品久久久久久第一页-人妻少妇精彩视品一区二区三区-91国产自拍免费视频-免费一级a在线播放视频正片-少妇天天日天天射天天爽-国产大屁股喷水视频在线观看-操美女骚穴抽插性爱视频-亚洲 欧美 中文字幕 丝袜-成人免费无码片在线观看

簡單好玩的編程代碼 javascriptvoid怎么解決( 二 )


function greet(user, message) {with(user) {console.log(`Hey ${name}, here is a message for you: ${message}`)}}// happy pathgreet({name: "Fernando"}, "You got 2 emails")// kinda sad pathgreet({name: "Fernando",message: "Unrelated message"}, "you got email")你認為這種執(zhí)行方式的輸出結(jié)果會是什么?
Hey Fernando, here is a message for you: You got 2 emailsHey Fernando, here is a message for you: Unrelated message由于你在傳入的對象中添加了一個同名屬性,你無意間覆蓋了函數(shù)的第二個參數(shù) 。我想補充的是,這完全是正常的,因為人們永遠不會期望兩者處于同一個作用域級別 。然而,多虧了 with,我們把這兩個作用域都混在了一起,但結(jié)果并不理想 。
這都是為了說明要避免使用 with,雖然它可能看起來是節(jié)省代碼量的好方法,但你的代碼很快會變得非常復雜,這會對別人(或兩周后的你)去理解你的代碼造成心智負擔 。
Labels 標簽如果你學習編程足夠早(像我一樣),你就經(jīng)歷過其他語言(如 C 語言)中對 go-to 語句的憎恨 。那太糟糕了,那是一個在當年很有意義的功能,但最終隨著同一問題的更新的解決方案,這種功能變得如此過時和糟糕,以至于變成了一種反模式 。
因此 JavaScript 不得不去實現(xiàn)它 。
Go-to 語句是一種方式,讓你在代碼的任何地方放置一個標記,然后從其他地方跳到那里 。你可以跳到一個函數(shù)的中間,或者跳到一個 IF 語句里面,它就像一個神奇的入口,可以跳到你代碼中的任何地方 。我相信你可以看到這可能是一個問題,它的力量太大,靈活性太強,我們當然會錯過使用它的機會 。
然而,JavaScript 實現(xiàn)了一個類似的,但不完全相同的結(jié)構(gòu):labels 標簽 。
JavaScript 中的標簽語句是一個你放在語句前的標記,然后你可以 break 或 continue 。請注意,沒有更多的 go-to,這是一個很好的優(yōu)勢 。
你可以這樣寫:
label1: {console.log(1)let condition = trueif(condition) {break label1}console.log(2)}console.log("end")而輸出結(jié)果將是:
1end當然,這個例子看起來非常像一個 if..else 語句 。而且你完全可以說,它看起來并不那么糟糕 。然而,你打破了代碼的正常流程,跳過了語句 。如果你就是希望如此,那么使用 if..else 帶來的心智負擔會小很多 。
當我們把標簽與循環(huán)和 continue 語句的相互作用包括在內(nèi)時,labels 標簽的問題就變得更明顯了 。
let i, j;loop1:for(i = 0; i < 10; i++) {loop2:for(j = 0; j < 10; j++) {if(j == 3 && i == 2) {continue loop2;}console.log({i, j})if(j % 2 == 0) {continue loop1;}}}你能在頭腦中運行上述代碼并告訴我具體的輸出結(jié)果嗎?這并非不可能,但要花點時間 。上面的腳本會打?。?br /> { i: 0, j: 0 }{ i: 1, j: 0 }{ i: 2, j: 0 }{ i: 3, j: 0 }{ i: 4, j: 0 }{ i: 5, j: 0 }{ i: 6, j: 0 }{ i: 7, j: 0 }{ i: 8, j: 0 }{ i: 9, j: 0 }從本質(zhì)上講,第二個 if 在 0 的時候評估為 true,所以 continue 語句影響了外循環(huán),導致它移動到下一個索引值,這反過來又重置了內(nèi)循環(huán),導致它回到 0,同樣的事情不斷發(fā)生,重復了 10 次 。第一個 if,如果你想知道的話,從來沒有評估為 true,因為 j 從來沒有達到 0 以外的任何值 。
labels 標簽可能是棘手的小家伙,即使你能正確地使用它們,并且從解釋器的角度來看,它們也很有意義,但你應該為人類而不是為機器寫代碼 。別人會來讀它(甚至是三周后的你),當他們看到標簽的那一刻,他們會永遠恨你 。當然,他們會花更多的時間來理解你代碼的基本流程,但這在目前是次要問題 。
本文總結(jié)請不要誤會,我喜歡 JavaScript 這門語言,自從 18 年前我開始從事網(wǎng)絡開發(fā)工作以來,我一直在以不同的方式與它互動 。我見證了這門語言的發(fā)展,就像一壇好酒,隨著時間的推移而變得更好 。然而,如果我說這門語言中沒有一些我不喜歡的黑暗角落,那是假的 。而這三個功能恰好表明了這一點 。


以上關于本文的內(nèi)容,僅作參考!溫馨提示:如遇健康、疾病相關的問題,請您及時就醫(yī)或請專業(yè)人士給予相關指導!

「愛刨根生活網(wǎng)」www.malaban59.cn小編還為您精選了以下內(nèi)容,希望對您有所幫助: