मैं जावास्क्रिप्ट में गोटो का उपयोग कैसे कर सकता हूं?


127

मेरे पास कुछ कोड हैं जिनका उपयोग करके मुझे बिल्कुल लागू करना होगा goto। उदाहरण के लिए, मैं इस तरह एक कार्यक्रम लिखना चाहता हूं:

start:
alert("RINSE");
alert("LATHER");
repeat: goto start

क्या जावास्क्रिप्ट में ऐसा करने का कोई तरीका है?


गोटो को संकलित जावास्क्रिप्ट के लिए दृढ़ विश्वास होगा। मेरे पास जावास्क्रिप्ट में लिखा गया एक JVM है। यह गोटो स्टेटमेंट के साथ बहुत अच्छा और छोटा होगा।
नवसंवत्सर

जवाबों:


151

पूर्ण रूप से! समर ऑफ़ गोटो नामक एक परियोजना है जो आपको जावास्क्रिप्ट का उपयोग अपनी पूरी क्षमता से करने की अनुमति देती है और आपके कोड को लिखने के तरीके में क्रांति लाएगी।

यह जावास्क्रिप्ट प्रीप्रोसेसिंग टूल आपको एक लेबल बनाने की अनुमति देता है और फिर इस सिंटैक्स का उपयोग करके गोटो:

[lbl] <label-name>
goto <label-name>

उदाहरण के लिए, प्रश्न में उदाहरण इस प्रकार लिखा जा सकता है:

[lbl] start:
alert("LATHER");
alert("RINSE");
[lbl] repeat: goto start;

ध्यान दें कि आप केवल एक सामान्य LATHER RINSEदोहराव चक्र जैसे साधारण तुच्छ कार्यक्रमों तक सीमित नहीं हैं - इसके द्वारा वहन की जाने वाली संभावनाएं gotoअनंत हैं और आप Hello, world!जावास्क्रिप्ट कंसोल को 538 बार इस तरह से भी संदेश दे सकते हैं :

var i = 0;
[lbl] start:
console.log("Hello, world!");
i++;
if(i < 538) goto start;

आप गोटो को कैसे लागू किया जाता है , इसके बारे में अधिक पढ़ सकते हैं , लेकिन मूल रूप से, यह कुछ जावास्क्रिप्ट प्रीप्रोसेसिंग करता है जो इस तथ्य का लाभ उठाता है कि आप एक लेबल वाले whileलूप के साथ गोटो का अनुकरण कर सकते हैं । इसलिए, जब आप "हैलो, दुनिया!" लिखते हैं। उपरोक्त कार्यक्रम, यह कुछ इस तरह से अनुवादित हो जाता है:

var i = 0;
start: while(true) {
  console.log("Hello, world!");
  i++;
  if(i < 538) continue start;
  break;
}

इस प्रीप्रोसेसिंग प्रक्रिया की कुछ सीमाएँ हैं, क्योंकि लूप कई कार्यों या ब्लॉकों में खिंचाव नहीं कर सकते हैं। यह कोई बड़ी बात नहीं है, हालांकि, मुझे यकीन है कि gotoजावास्क्रिप्ट में लाभ लेने में सक्षम होने के फायदे आपको पूरी तरह से प्रभावित करेंगे।

उपरोक्त सभी लिंक जो goto.js लाइब्रेरी की ओर ले जाते हैं, वे सभी DEAD हैं, यहाँ आवश्यक लिंक हैं:

goto.js (असम्पीडित) --- parseScripts.js (असम्पीडित)

से Goto.js :

PS जो कोई भी सोच रहा है (अब तक कुल शून्य लोग) के लिए, समर ऑफ़ गोटो एक शब्द है जिसे पॉल आयरिश ने लोकप्रिय किया था, जबकि इस स्क्रिप्ट और PHP के गोटो को अपनी भाषा में जोड़ने के फैसले पर चर्चा की।

और जो लोग तुरंत नहीं पहचानते हैं कि यह पूरी बात एक मजाक है, कृपया मुझे माफ कर दें। <- (बीमा)।


10
@SurrealDreams यह एक मजाक हो सकता है, लेकिन यह वास्तव में काम करता है। आप jsFiddle लिंक पर क्लिक कर सकते हैं और देख सकते हैं कि वे वास्तव में काम करते हैं।
पीटर ओल्सन

22
आप जिस लेख से जुड़े हैं, वह वास्तव में यह एक मजाक है :)
pimvdb

6
@PeterOlson, लेकिन स्टैकओवरफ़्लो का उद्देश्य लोगों को प्रोग्रामिंग सीखने में मदद करना है। सवाल और जवाब के साथ ऐसा करने के लिए उपयोगी होना चाहिए। इसमें किसी की मदद नहीं ली जा रही है।
गोल्डननबी

5
@ShadowWizard यह उत्तर पहले से ही बहुत सारे अस्वीकरणों और लोगों से घिरा हुआ है जो इस बारे में बात कर रहे हैं कि इसका उपयोग क्यों नहीं किया जाना चाहिए। मुझे ऐसा करने में कोई शर्म नहीं है, जो लोग ऐसा करने के परिणामों का सामना करने की उपेक्षा करेंगे।
पीटर ओल्सन

8
@AlexMills के लिए +1। ईमानदारी से, मुझे लगता gotoहै कि संभवतः इसका उपयोग किया जा रहा है। यह कुछ बहुत अच्छी त्रुटि हैंडलिंग पैटर्न के लिए बनाता है। हेक, हम उपयोग करते हैं switch, जो gotoसभी लेकिन नाम में है, और कोई भी पेट-दर्द नहीं करता है।
0x1mason

122

नहीं, उन्होंने इसे ECMAScript में शामिल नहीं किया है:

ECMAScript में कोई गोटो स्टेटमेंट नहीं है।


1
मैं सोच रहा था कि जावास्क्रिप्ट को डीबग करते समय GOTO उपयोगी होगा या नहीं। Afaik, केवल IE अपने डिबगर में GOTO प्रदान करता है ... और मुझे वास्तव में इसके लिए एक उपयोग-मामला मिला, लेकिन मुझे यकीन नहीं है कि यह आम तौर पर उपयोगी हो सकता है ... जावास्क्रिप्ट डिबग करते समय चारों ओर कूदने के लिए। तुम क्या सोचते हो?
41इम विद

3
@ With समय विद: मुझे यकीन नहीं है कि गोटो कार्यक्षमता के साथ डिबगिंग उपयोगी है। मूल रूप से आप एक तरह से कोड पथ के साथ गड़बड़ कर रहे होंगे जो कभी भी डिबगिंग के बिना नहीं होगा।
pimvdb

12
क्या अफ़सोस की बात है ... IMHO gotoसिर्फ "फीचर्स" की जावास्क्रिप्ट के कॉकटेल में पूरी तरह से फिट होगा :) :)
यूरी Nakonechnyy

4
gotoहालाँकि भविष्य में उपयोग के लिए एक आरक्षित कीवर्ड है। हम केवल आशा कर सकते हैं :)
Azmisov

4
gotoजब आप एक नेस्टेड फ़ंक्शन से वापस लौटना चाहते हैं तो उपयोगी होगा। उदाहरण के लिए, जब अंडरस्कोर। Js का उपयोग करते हैं, तो आप सरणियों पर पुनरावृति करते समय एक अनाम फ़ंक्शन प्रदान करते हैं। आप इस तरह के एक समारोह के अंदर से वापस नहीं आ सकते हैं, इसलिए goto end;यह उपयोगी होगा।
हुब्रो

31

दरअसल, मैं देख रहा हूं कि ECMAScript (जावास्क्रिप्ट) INESED में एक गोटो स्टेटमेंट है। हालाँकि, जावास्क्रिप्ट गोटो के दो फ्लेवर हैं!

गोटो के दो जावास्क्रिप्ट फ्लेवर्स को लेबल जारी और लेबल ब्रेक कहा जाता है। जावास्क्रिप्ट में कोई कीवर्ड "गोटो" नहीं है। गोटो ब्रेक और जारी कीवर्ड का उपयोग करके जावास्क्रिप्ट में पूरा किया जाता है।

और यह कमोबेश w3schools की वेबसाइट http://www.w3schools.com/js/js_switch.asp पर स्पष्ट रूप से कहा गया है ।

मुझे लगता है कि लेबल जारी है और लेबल विराम कुछ अजीब तरह से व्यक्त किए गए हैं।

लेबल जारी और लेबल विराम के बीच का अंतर वह है जहाँ उनका उपयोग किया जा सकता है। लेबल जारी केवल थोड़ी देर लूप के अंदर इस्तेमाल किया जा सकता है। कुछ और जानकारी के लिए w3schools देखें।

===========

एक और दृष्टिकोण जो काम करेगा, वह है एक विशाल जबकि बयान के साथ एक विशाल स्विच स्टेटमेंट अंदर:

while (true)
{
    switch (goto_variable)
    {
        case 1:
            // some code
            goto_variable = 2
            break;
        case 2:
            goto_variable = 5   // case in etc. below
            break;
        case 3:
            goto_variable = 1
            break;

         etc. ...
    }

}

9
"लेबल जारी केवल थोड़ी देर के लूप के अंदर उपयोग किया जा सकता है।" - नहीं, लेबल breakऔर छोरों में भी continueइस्तेमाल किया जा सकता forहै। लेकिन वे वास्तव में दिए गए समान नहींgoto हैं कि वे संबंधित लूप (एस) की संरचना में बंद हैं, gotoजिसकी तुलना में निश्चित रूप से - उन भाषाओं में हो सकती हैं - जिनके पास कहीं भी है।
nnnnnn

31

क्लासिक जावास्क्रिप्ट में आपको इस प्रकार के कोड को प्राप्त करने के लिए डू-जबकि लूप का उपयोग करना होगा। मुझे लगता है कि आप शायद किसी और चीज के लिए कोड उत्पन्न कर रहे हैं।

इसे करने का तरीका, जैसे कि बाइटकोड को जावास्क्रिप्ट में शामिल करने के लिए हर लेबल लक्ष्य को "लेबल" करते समय लपेटना है।

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);

आपके द्वारा लेबल किए गए प्रत्येक लूप जबकि आप इस तरह उपयोग करते हैं, वास्तव में एक लेबल के लिए दो लेबल बिंदु बनाता है। एक शीर्ष पर और एक पाश के अंत में। वापस कूदना जारी रहता है और आगे की ओर कूदने से ब्रेक का उपयोग होता है।

// 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++;
} 

तो मान लीजिए कि कोड बायकोड्स से एनकोड हो जाता है, इसलिए अब आपको किसी उद्देश्य के लिए अपने बैकएंड का अनुकरण करने के लिए जावास्क्रिप्ट में बाईटेककोड डालना होगा।

जावास्क्रिप्ट शैली:

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 के लिए आपको कभी भी गोटो का उपयोग करने की आवश्यकता नहीं होनी चाहिए, इसलिए आपको संभवतः इस तकनीक से बचना चाहिए जब तक कि आप विशिष्ट रूप से जावास्क्रिप्ट पर चलने के लिए अन्य शैली कोड का अनुवाद नहीं कर रहे हैं। मुझे लगता है कि उदाहरण के लिए वे जावास्क्रिप्ट को बूट करने के लिए लिनक्स कर्नेल कैसे प्राप्त करते हैं।

ध्यान दें! यह सब भोली व्याख्या है। JEC के उचित बैकएंड के लिए कोड को आउटपुट करने से पहले लूप की जांच करने पर भी विचार करें। कई सरल जबकि छोरों को ऐसे ही पहचाना जा सकता है और फिर आप गोटो के बजाय लूप का उपयोग कर सकते हैं।


1
continueएक do ... whileलूप में चेक की स्थिति बनी रहती है । इस तरह से gotoयहाँ पीछे की ओर do ... while (0)काम नहीं करता है। ecma-international.org/ecma-262/5.1/#sec-12.6.1
ZachB

1
काम नहीं करता है। मुझे इसके let doLoopलिए काम करना होगा। और मुख्य लूप: let doLoop = false; do { if(condition){ doLoop = true; continue; } } while (doLoop) github.com/patarapolw/HanziLevelUp/blob/…
Polv

15

यह एक पुराना सवाल है, लेकिन चूंकि जावास्क्रिप्ट एक चलती लक्ष्य है - यह उचित पूंछ कॉल का समर्थन करने वाले कार्यान्वयन पर ES6 में संभव है। उचित पूंछ कॉल के लिए समर्थन के साथ कार्यान्वयन पर, आप सक्रिय पूंछ कॉल की एक अनबाउंड संख्या हो सकती है (यानी टेल कॉल "स्टैक विकसित नहीं")।

goto को बिना पैरामीटर वाले टेल कॉल के रूप में सोचा जा सकता है।

उदाहरण:

start: alert("RINSE");
       alert("LATHER");
       goto start

के रूप में लिखा जा सकता है

 function start() { alert("RINSE");
                    alert("LATHER");
                    return start() }

यहाँ करने के लिए कॉल start टेल पोजिशन है, इसलिए स्टैक ओवरफ्लो नहीं होगा।

यहाँ एक और अधिक जटिल उदाहरण है:

 label1:   A
           B
           if C goto label3
           D
 label3:   E
           goto label1

सबसे पहले, हम स्रोत को ब्लॉक में विभाजित करते हैं। प्रत्येक लेबल एक नए ब्लॉक की शुरुआत को इंगित करता है।

 Block1
     label1:   A
               B
               if C goto label3
               D

  Block2    
     label3:   E
               goto label1

हमें गोटो का उपयोग करके ब्लॉकों को एक साथ बांधने की आवश्यकता है। उदाहरण में ब्लॉक ई डी का अनुसरण करता है, इसलिए हम एक goto label3डी जोड़ते हैं ।

 Block1
     label1:   A
               B
               if C goto label2
               D
               goto label2

  Block2    
     label2:   E
               goto label1

अब प्रत्येक ब्लॉक एक फ़ंक्शन बन जाता है और प्रत्येक गेटो एक टेल कॉल बन जाता है।

 function label1() {
               A
               B
               if C then return( label2() )
               D
               return( label2() )
 }

 function label2() {
               E
               return( label1() )
 }

कार्यक्रम शुरू करने के लिए, का उपयोग करें label1()

फिर से लिखना विशुद्ध रूप से यांत्रिक है और इस प्रकार एक स्थूल प्रणाली जैसे कि मीठे के साथ किया जा सकता है।


"यह उचित पूंछ कॉल का समर्थन करने वाले कार्यान्वयन पर ईएस 6 में संभव है"। AFAIK टेल कॉल सभी प्रमुख ब्राउज़रों में अक्षम हैं।
JD

सफारी उचित पूंछ कॉल का समर्थन करता है, मुझे विश्वास है। जिस समय उत्तर दिया गया था, कमांड लाइन स्विच के माध्यम से क्रोम में उचित टेल कॉल को सक्षम करना संभव था। चलो आशा करते हैं कि वे पुनर्विचार करें - या कम से कम स्पष्ट रूप से चिह्नित पूंछ कॉल का समर्थन करना शुरू कर दें।
23

स्पष्ट रूप से चिह्नित पूंछ कॉल शायद सभी को खुश कर देंगे।
जेडी

14
const
    start = 0,
    more = 1,
    pass = 2,
    loop = 3,
    skip = 4,
    done = 5;

var label = start;


while (true){
    var goTo = null;
    switch (label){
        case start:
            console.log('start');
        case more:
            console.log('more');
        case pass:
            console.log('pass');
        case loop:
            console.log('loop');
            goTo = pass; break;
        case skip:
            console.log('skip');
        case done:
            console.log('done');

    }
    if (goTo == null) break;
    label = goTo;
}

8

एक forपाश के बारे में कैसे ? जितनी बार चाहें उतनी बार दोहराएं। या एक whileलूप, एक शर्त पूरी होने तक दोहराएं। नियंत्रण संरचनाएं हैं जो आपको कोड दोहराएंगी। मुझे याद GOTOहै बेसिक में ... इसने इतना बुरा कोड बनाया! आधुनिक प्रोग्रामिंग भाषाएं आपको बेहतर विकल्प देती हैं जिन्हें आप वास्तव में बनाए रख सकते हैं।


अनंत उत्पादन पाश: प्रोटोटाइप, खरोंच, बेहतर प्रोटोटाइप, खरोंच, बेहतर बेहतर प्रोटोटाइप, खरोंच। रखरखाव अक्सर एक गिरावट है। कई कोड को बनाए रखने की आवश्यकता नहीं है। अधिकांश कोड फिर से लिखे गए हैं, बनाए नहीं रखे गए हैं।
पचेरियर

7

ऐसा एक तरीका है जिससे इसे किया जा सकता है, लेकिन इसे सावधानीपूर्वक योजना बनाने की आवश्यकता है। निम्नलिखित QBASIC कार्यक्रम का उदाहरण लें:

1 A = 1; B = 10;
10 print "A = ",A;
20 IF (A < B) THEN A = A + 1; GOTO 10
30 PRINT "That's the end."

फिर पहले सभी वेरिएबल्स को इनिशियलाइज़ करने के लिए अपना जावास्क्रिप्ट बनाएँ, इसके बाद बॉल रोलिंग शुरू करने के लिए एक प्रारंभिक फ़ंक्शन कॉल करें (हम इस प्रारंभिक फ़ंक्शन कॉल को अंत में निष्पादित करते हैं), और आपके द्वारा ज्ञात लाइनों के हर सेट के लिए फ़ंक्शन सेट करेंगे। एक इकाई।

प्रारंभिक फ़ंक्शन कॉल के साथ इसका अनुसरण करें ...

var a, b;
function fa(){
    a = 1;
    b = 10;
    fb();
}
function fb(){
    document.write("a = "+ a + "<br>");
    fc();
}
function fc(){
    if(a<b){
        a++;
        fb();
        return;
    }
    else
    {
    document.write("That's the end.<br>");
    }
}
fa();

इस उदाहरण में परिणाम है:

a = 1
a = 2
a = 3
a = 4
a = 5
a = 6
a = 7
a = 8
a = 9
a = 10
That's the end.

@JonHarrop एक अधिकतम स्टैक आकार है जिसे जावास्क्रिप्ट ओवरफ्लो होने से पहले हैंडल कर सकता है?
एलिसेओ डी'एनुंजियो

1
हाँ और यह बहुत छोटा लगता है। मैंने कभी भी किसी अन्य भाषा की तुलना में बहुत छोटा है।
जेडी

7

आम तौर पर, मैं खराब पठनीयता के लिए GoTo का उपयोग नहीं करना चाहूंगा। मेरे लिए, यह पुनरावर्ती कार्यों को प्रोग्राम करने के बजाय सरल पुनरावृत्त कार्यों को प्रोग्रामिंग करने के लिए एक बुरा बहाना है, या इससे भी बेहतर (यदि स्टैक ओवरफ्लो जैसी चीजों की आशंका है), तो उनके सच्चे पुनरावृत्ति विकल्प (जो कभी-कभी जटिल हो सकते हैं)।

कुछ ऐसा होगा:

while(true) {
   alert("RINSE");
   alert("LATHER");
}

यह सही है कि एक अनंत लूप है। अभिव्यक्ति ("सच्चा") क्लाज के परांठे के अंदर होता है जिसे जावास्क्रिप्ट इंजन जांचता है - और यदि अभिव्यक्ति सही है, तो यह लूप को चालू रखेगा। यहां "सच" लिखना हमेशा सच का मूल्यांकन करता है, इसलिए एक अनंत लूप।


7

यकीन है, switchनिर्माण का उपयोग कर आप gotoजावास्क्रिप्ट में अनुकरण कर सकते हैं । दुर्भाग्य से, भाषा प्रदान नहीं करती है goto, लेकिन यह प्रतिस्थापन का एक अच्छा हिस्सा है।

let counter = 10
function goto(newValue) {
  counter = newValue
}
while (true) {
  switch (counter) {
    case 10: alert("RINSE")
    case 20: alert("LATHER")
    case 30: goto(10); break
  }
}

5

आप शायद इस तरह कुछ जे एस ट्यूटोरियल पढ़ना चाहिए एक

अगर यकीन नहीं goto जेएस में मौजूद है, लेकिन, किसी भी तरह से, यह खराब कोडिंग शैली को प्रोत्साहित करता है और इसे टाला जाना चाहिए।

तुम यह कर सकते थे:

while ( some_condition ){
    alert('RINSE');
    alert('LATHER');
}

4

आप एक समारोह का उपयोग कर सकते हैं:

function hello() {
    alert("RINSE");
    alert("LATHER");
    hello();
}

5
यह एक बहुत बुरा विचार है क्योंकि यह कॉल स्टैक पर रिटर्न एड्रेस को तब तक धकेलता रहेगा जब तक कि सिस्टम मेमोरी से बाहर नहीं निकल जाता।
पॉल हचिंसन

1
हालाँकि, अंतहीन अंतहीन RINSE-LATHER संवादों से बहुत पहले उपयोगकर्ता के पास CTRL-ALT-DELETEd होगा!
शायनी

4

कॉल स्टैक को साफ रखते हुए गोटो जैसी कार्यक्षमता प्राप्त करने के लिए, मैं इस पद्धति का उपयोग कर रहा हूं:

// in other languages:
// tag1:
// doSomething();
// tag2:
// doMoreThings();
// if (someCondition) goto tag1;
// if (otherCondition) goto tag2;

function tag1() {
    doSomething();
    setTimeout(tag2, 0); // optional, alternatively just tag2();
}

function tag2() {
    doMoreThings();
    if (someCondition) {
        setTimeout(tag1, 0); // those 2 lines
        return;              // imitate goto
    }
    if (otherCondition) {
        setTimeout(tag2, 0); // those 2 lines
        return;              // imitate goto
    }
    setTimeout(tag3, 0); // optional, alternatively just tag3();
}

// ...

कृपया ध्यान दें कि फ़ंक्शन कॉल्स को टाइमआउट कतार में शामिल करने के बाद से यह कोड धीमा है, जिसे बाद में ब्राउज़र के अपडेट लूप में मूल्यांकन किया गया है।

कृपया यह भी ध्यान दें कि आप तर्क पारित कर सकते हैं ( setTimeout(func, 0, arg1, args...)IE9 की तुलना में नए ब्राउज़र में या setTimeout(function(){func(arg1, args...)}, 0)पुराने ब्राउज़र में)।

AFAIK, आपको कभी भी ऐसे मामले में नहीं चलना चाहिए जिसमें इस पद्धति की आवश्यकता होती है जब तक आपको async / प्रतीक्षा समर्थन के बिना वातावरण में एक गैर-समानांतर लूप को रोकने की आवश्यकता न हो।


1
बुरा। मुझे यह पसंद है। एफडब्ल्यूआईडब्ल्यू, उस तकनीक को ट्रम्पोलिनिंग कहा जाता है।
जेडी

मैं इस काम को सत्यापित कर सकता हूं। मैं मैन्युअल रूप से फ़ंक्शन कॉल के रूप में लागू होने पर जीटीओ के बयानों के साथ कुछ एचपी आरपीएन को मैन्युअल रूप से ट्रांसप्लांट कर रहा हूं; सेटटाइमआउट () विधि के ऊपर दिखाया गया स्टैक ढह जाता है और पुनरावृत्ति अब कोई समस्या नहीं है। लेकिन यह बहुत धीमा है। ओह, और मैं यह Node.js. में कर रहा हूँ
जेफ लोरी

3

सभी माता-पिता के बंद होने की शुरुआत और अंत

var foo=false;
var loop1=true;
LABEL1: do {var LABEL1GOTO=false;
    console.log("here be 2 times");
    if (foo==false){
        foo=true;
        LABEL1GOTO=true;continue LABEL1;// goto up
    }else{
        break LABEL1; //goto down
    }
    console.log("newer go here");
} while(LABEL1GOTO);

3
// example of goto in javascript:

var i, j;
loop_1:
    for (i = 0; i < 3; i++) { //The first for statement is labeled "loop_1"
        loop_2:
            for (j = 0; j < 3; j++) { //The second for statement is labeled "loop_2"
                if (i === 1 && j === 1) {
                    continue loop_1;
                }
                console.log('i = ' + i + ', j = ' + j);
            }
        }

2

इसे प्राप्त करने का एक और वैकल्पिक तरीका पूंछ कॉल का उपयोग करना है। लेकिन, हमारे पास जावास्क्रिप्ट में ऐसा कुछ नहीं है। इसलिए आम तौर पर, JS को नीचे दिए गए दो कीवर्ड का उपयोग करके JS में पूरा किया जाता है। विराम और जारी रखें , संदर्भ: जावास्क्रिप्ट में गोटो स्टेटमेंट

यहाँ एक उदाहरण है:

var number = 0;
start_position: while(true) {
document.write("Anything you want to print");
number++;
if(number < 100) continue start_position;
break;
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.