第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在Javascript中使用goto?

如何在Javascript中使用goto?

郎朗坤 2019-11-26 14:53:45
我有一些絕對必須使用實現(xiàn)的代碼goto。例如,我要編寫這樣的程序:start:alert("RINSE");alert("LATHER");repeat: goto start有沒有辦法用Javascript做到這一點?
查看完整描述

3 回答

?
慕容708150

TA貢獻1831條經(jīng)驗 獲得超4個贊

在經(jīng)典JavaScript中,您需要使用do-while循環(huán)來實現(xiàn)這種類型的代碼。我想您可能正在為其他事情生成代碼。


像將字節(jié)碼后端備份到JavaScript一樣,這樣做的方法是將每個標簽目標包裝在“標簽化”的do-while中。


LABEL1: do {

  x = x + 2;

  ...

  // JUMP TO THE END OF THE DO-WHILE - A FORWARDS GOTO

  if (x < 100) break LABEL1;

  // JUMP TO THE START OF THE DO WHILE - A BACKWARDS GOTO...

  if (x < 100) continue LABEL1;

} while(0);

這樣使用的每個帶標簽的do-while循環(huán)實際上都會為一個標簽創(chuàng)建兩個標簽點。一個在循環(huán)的頂部,另一個在循環(huán)的末尾。跳回使用繼續(xù),向前跳使用中斷。


// NORMAL CODE


MYLOOP:

  DoStuff();

  x = x + 1;

  if (x > 100) goto DONE_LOOP;

  GOTO MYLOOP;



// JAVASCRIPT STYLE

MYLOOP: do {

  DoStuff();

  x = x + 1;

  if (x > 100) break MYLOOP;

  continue MYLOOP;// Not necessary since you can just put do {} while (1) but it     illustrates

} while (0)

不幸的是,沒有其他方法可以做到這一點。


普通示例代碼:


while (x < 10 && Ok) {

  z = 0;

  while (z < 10) {

    if (!DoStuff()) {

      Ok = FALSE;

      break;

    }

    z++;

  }

  x++;

假設代碼已編碼為字節(jié)碼,那么現(xiàn)在您必須將字節(jié)碼放入JavaScript中,以出于某些目的模擬后端。


JavaScript樣式:


LOOP1: do {

  if (x >= 10) break LOOP1;

  if (!Ok) break LOOP1;

  z = 0;

  LOOP2: do {

    if (z >= 10) break LOOP2;

    if (!DoStuff()) {

      Ok = FALSE;

      break LOOP2;

    }

    z++;

  } while (1);// Note While (1) I can just skip saying continue LOOP2!

  x++;

  continue LOOP1;// Again can skip this line and just say do {} while (1)

} while(0)

因此,使用此技術僅出于簡單目的即可完成工作。除此之外,您無能為力。


對于普通的Javacript,您永遠不需要使用goto,因此除非您明確翻譯了其他樣式代碼以在JavaScript上運行,否則您應該在這里避免使用此技術。例如,我假設這就是他們?nèi)绾问筁inux內(nèi)核在JavaScript中啟動。


注意!這都是天真的解釋。對于正確的字節(jié)碼Js后端,還應考慮在輸出代碼之前檢查循環(huán)??梢赃@樣檢測到許多簡單的while循環(huán),然后您可以使用循環(huán)而不是goto。


查看完整回答
反對 回復 2019-11-26
?
MMTTMM

TA貢獻1869條經(jīng)驗 獲得超4個贊


絕對!有一個名為Summer of Goto的項目,它使您可以最大程度地使用JavaScript,并將徹底改變您編寫代碼的方式。


使用此JavaScript預處理工具,您可以創(chuàng)建標簽,然后使用以下語法轉(zhuǎn)到標簽:


[lbl] <label-name>

goto <label-name>

例如,問題中的示例可以編寫如下:


[lbl] start:

alert("LATHER");

alert("RINSE");

[lbl] repeat: goto start;

請注意,您不僅限于無窮無盡的LATHER RINSE重復循環(huán)這樣的簡單程序,它所提供的可能性goto是無限的,您甚至可以Hello, world!向JavaScript控制臺發(fā)送一條消息538次,如下所示:


var i = 0;

[lbl] start:

console.log("Hello, world!");

i++;

if(i < 538) goto start;

您可以閱讀有關goto的實現(xiàn)方式的更多信息,但是基本上,它會執(zhí)行一些JavaScript預處理,這利用了您可以使用帶標簽的whileloop模擬goto的事實。因此,當您編寫“您好,世界!” 上面的程序,它被翻譯成這樣的東西:


var i = 0;

start: while(true) {

  console.log("Hello, world!");

  i++;

  if(i < 538) continue start;

  break;

}

該預處理過程存在一些限制,因為while循環(huán)無法跨越多個功能或塊。不過,這沒什么大不了的-我相信能夠利用gotoJavaScript的好處絕對會讓您不知所措。


上面所有通往goto.js庫的鏈接都是DEAD DEAD,這是需要的鏈接:


goto.js(未壓縮) --- parseScripts.js(未壓縮)


從Goto.js:


PS對于任何想知道的人(到目前為止共有零個人),Summer of Goto是Paul Irish推廣的一個術語,同時討論了該腳本和PHP決定將goto添加到他們的語言中。


對于那些沒有立即意識到這整個事情是在開玩笑的人,請原諒我。<—(保險)。


查看完整回答
反對 回復 2019-11-26
  • 3 回答
  • 0 關注
  • 8733 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號