成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

JavaScript 假如default不是switch的最后一項(xiàng)

開發(fā) 前端
switch的邏輯很簡單,根據(jù)switch內(nèi)容的值執(zhí)行對(duì)應(yīng)的case項(xiàng),否則執(zhí)行default項(xiàng)即可。但是不同的語言在具體一些細(xì)節(jié)上面的處理卻是不同的。本文主要介紹javascript中的應(yīng)用,一起來看。

話說大家對(duì)于switch語句應(yīng)該再熟悉不過了,各種類C語言都不例外,JavaScript自然也是如此。switch的邏輯很簡單,根據(jù)switch內(nèi)容的值執(zhí)行對(duì)應(yīng)的case項(xiàng),否則執(zhí)行default項(xiàng)即可。但是不同的語言在具體一些細(xì)節(jié)上面的處理卻是不同的。

例如在JavaScript里,每個(gè)case項(xiàng)都可以沒有break,于是語句便會(huì)順延到下個(gè)case或是default里面去——但某些語言設(shè)計(jì)者認(rèn)為這種特性容易造成代碼理解上的偏差,因此比如在C#里便要求每個(gè)case都要有個(gè)break。那么再來一個(gè)細(xì)節(jié)問題:如果default之后還有case,那么會(huì)出現(xiàn)什么樣的情況?如果default里沒有break呢?

 

  1. switch (a)   
  2. {  
  3. case 0:  
  4. console.log("0");  
  5. default:  
  6. console.log("default");  
  7. case 1:  
  8. console.log("1");  

 

就好比這段代碼,當(dāng)a等于0、1或2的時(shí)候,將會(huì)輸出什么樣的內(nèi)容呢?先猜猜,別急著往下看。

當(dāng)a等于0時(shí),則會(huì)輸出:

  1. 0    
  2. default   

 

當(dāng)a等于1時(shí),則會(huì)輸出:

 

 

當(dāng)a等于2時(shí),則會(huì)輸出:

     

  1. default   

 

好吧,盡管這樣的代碼比較罕見,但執(zhí)行結(jié)果也并沒有什么“特殊”的。switch的規(guī)則依舊可以用一句話說清:如果匹配到某個(gè)case,則從該case處開始執(zhí)行,否則就從default處開始執(zhí)行,一直向下,直到出現(xiàn)break語句為止。至于default的位置是否在***,對(duì)于執(zhí)行的策略可謂完全沒有影響。

當(dāng)然,我實(shí)在沒想到為什么有人會(huì)寫這樣的代碼,所以假如有人對(duì)這點(diǎn)感覺恍惚我也覺得沒太大關(guān)系。不過既然我要寫Jscex,則還是必須對(duì)此類代碼的行為有所了解。盡管語言的使用者可以選擇合適的子集,但語言的開發(fā)者(編譯器、解釋器等等)卻必須遵循完整的規(guī)范,這是Jscex這類項(xiàng)目需要應(yīng)對(duì)的麻煩。

既然Jscex號(hào)稱支持“全部JavaScript語言特性”,自然對(duì)switch的支持也在包括在內(nèi)。switch的麻煩之處在于它的每個(gè)分支不像if語句那樣完全相互獨(dú)立,而是會(huì)不斷“穿透”下去直至遇上break。因此Jscex在處理switch的時(shí)候也使用了一些技巧。例如下面這段代碼:

 

  1. switch (a) {  
  2. case 0:  
  3. $await(helloWorld());  
  4. default:  
  5. console.log("default");  
  6. case 1:  
  7. console.log("1");  

 

Jscex會(huì)將每個(gè)case及default中的語句“補(bǔ)齊”,以“確保”每項(xiàng)里都有完整的語句以及***的break:

 

  1. switch (a) {  
  2. case 0:  
  3. $await(helloWorld());  
  4. console.log("default");  
  5. console.log("1");  
  6. break;  
  7. default:  
  8. console.log("default");  
  9. console.log("1");  
  10. break;  
  11. case 1:  
  12. console.log("1");  
  13. break;  

 

然后再將其編譯為:

 

  1. switch (a) {  
  2. case 0:  
  3. return $$_builder_$$_0.Bind(helloWorld(), function () {  
  4. console.log("default");  
  5. console.log("1");  
  6. return $$_builder_$$_0.Normal();  
  7. });  
  8. default:  
  9. console.log("default");  
  10. console.log("1");  
  11. return $$_builder_$$_0.Normal();  
  12. case 1:  
  13. console.log("1");  
  14. return $$_builder_$$_0.Normal();  
  15. }  
  16. }) 

 

自然,如果switch里沒有包含bind操作(例如$await語句),則整個(gè)switch語句都會(huì)得以保留,這也是Jscex編譯結(jié)果的優(yōu)化策略之一。

原文地址:http://blog.zhaojie.me/2011/05/javascript-when-break-is-not-the-last-choice-of-switch.html

【編輯推薦】

  1. 在Java中>、>>、>>>三者的區(qū)別
  2. 分享Java連接各種數(shù)據(jù)庫的實(shí)例
  3. Java編譯器優(yōu)化方法簡介
  4. 常見的十四種Java開發(fā)工具的特點(diǎn)
  5. Java中的四個(gè)核心技術(shù)思想
責(zé)任編輯:于鐵 來源: 老趙的博客
相關(guān)推薦

2023-02-13 23:15:31

ChatGPT聊天機(jī)器人人工智能

2021-02-08 23:17:25

IT投資首席信息官

2021-12-28 10:16:59

ITIT領(lǐng)導(dǎo)IT管理

2022-07-11 10:38:24

首席信息官CIO

2021-05-10 09:52:35

技術(shù)隱私瀏覽器

2009-07-27 14:38:34

網(wǎng)絡(luò)運(yùn)維管理奧運(yùn)

2015-10-20 17:13:56

Perforce

2013-02-21 08:35:42

蘋果云計(jì)算數(shù)據(jù)中心

2021-11-15 15:48:22

招聘AI人工智能

2015-05-18 10:28:19

AndroidiOS應(yīng)用

2020-02-13 07:20:05

微軟Windows 10WonderBar

2021-09-09 09:37:23

MySQLGalera數(shù)據(jù)庫

2010-08-02 09:30:49

云計(jì)算

2023-04-10 16:09:58

2023-12-01 08:00:00

人工智能IT

2016-02-16 10:34:42

Spark大數(shù)據(jù)數(shù)據(jù)處理

2020-07-19 15:20:34

程序員技術(shù)設(shè)計(jì)

2021-04-29 22:33:58

Windows 10Windows微軟

2018-06-03 08:48:36

2011-09-05 14:51:23

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 久久精品亚洲 | 日韩国产精品一区二区三区 | 华人黄网站大全 | 国产一级淫片a直接免费看 免费a网站 | www精品 | 国产精品国产精品国产专区不卡 | 亚洲精品久久久久久久不卡四虎 | 亚洲天堂中文字幕 | 久久在线精品 | 欧美日韩国产中文字幕 | 国产精品欧美一区二区三区不卡 | 一a一片一级一片啪啪 | a成人| 亚洲精品99 | 九色在线视频 | 久久精品综合 | 人人做人人澡人人爽欧美 | 精品久久久久久中文字幕 | 一级高清免费毛片 | 亚洲欧美中文日韩在线v日本 | 国产精品 欧美精品 | 成人国产精品久久久 | 日本精品视频 | 91精品国产91久久久久久吃药 | 亚洲精品一区二区三区在线 | 欧美v在线观看 | 天天爱av| 欧美久久一级特黄毛片 | 伊人啪啪网 | 综合九九 | 久久精品国产亚洲 | 二区三区在线观看 | 中文成人无字幕乱码精品 | 国产免费视频 | 一区不卡在线观看 | 午夜天堂精品久久久久 | 女人天堂av | 看真人视频一级毛片 | 在线午夜 | 欧美日韩一区二区三区不卡视频 | 亚洲精品一区二区三区 |