ফাংশন থেকে আউট প্রস্থান?


402

আমার একটি ফাংশন রয়েছে:

function myfunction() {
  if (a == 'stop')  // How can I stop the function here?
}

exit()জাভাস্ক্রিপ্ট এর মতো কিছু আছে কি ?


4
আপনি কি ফাঁসি কার্যকর করতে চান বা ফিরে যেতে চান?
কেন স্ট্রুজ

@ কেন স্ট্রুস পার্থক্য কি? আমি যেমন বুঝতে পেরেছি, আমি যদি ফিরে আসি তবে তা কার্যকর করা বন্ধ করে দেয়? তাই না?
সাইমন

3
ভাল জিনিস এখানে, একটি রিটার্ন ব্যবহার করে কলিং ফাংশন প্রসঙ্গে ফিরে আসবে। আপনি যদি বাস্তবে প্রস্থান বন্ধ করতে চান তবে আপনি মৃত্যুদন্ড বন্ধ করতে চান, আপনি এই জাতীয় কিছু করতে পারেন: vikku.info/codesnippets/javascript/…
কেন স্ট্রুস

1
@ কেন - এই লিঙ্কটি আপনি একটি forলুপের কার্যকারিতা বন্ধ করার বিষয়ে চুক্তি সরবরাহ করেছেন । তারপরেও, আমার জানা নেই যে প্রস্তাবিত পদ্ধতিটি কেন ব্যবহৃত হবে, যখন আপনি কেবল কল করতে পারেন break;। নিবন্ধ থেকে উদাহরণটি if(i==5) break;ব্যবহার returnকরতে : আপনি কোনও forলুপে রয়েছেন বা না থাকায় ব্যবহারের ফলে ফাংশনটির সম্পাদন বন্ধ হবে ।
ব্যবহারকারী 113716

সায়োম - হ্যাঁ, returnফাংশনটির সম্পাদন বন্ধ করবে, যা আপনি যা চেয়েছিলেন বলে মনে হয়।
ব্যবহারকারী 113716

উত্তর:


639

আপনি শুধু ব্যবহার করতে পারেন return

function myfunction() {
     if(a == 'stop') 
         return;
}

এটি undefinedফাংশন যাকে বলে তার রিটার্ন মান প্রেরণ করবে ।

var x = myfunction();

console.log( x );  // console shows undefined

অবশ্যই, আপনি একটি ভিন্ন রিটার্ন মান নির্দিষ্ট করতে পারেন। যে মানটি ফেরত আসবে তা উপরের উদাহরণটি ব্যবহার করে কনসোলে লগ হবে।

return false;
return true;
return "some string";
return 12345;

4
আমি জানি এটি একটি পুরানো পোস্ট, এবং এটি সাধারণ অনুশীলন তবে আমি মনে করি এটি একটি খারাপ সমাধান। যদি ফাংশনটি কোনও মান ফেরত দেওয়ার জন্য সমর্থন করে তবে আপনার রিটার্ন ব্যবহার করা উচিত। আপনি যদি অন্ধভাবে রিটার্ন ব্যবহার করেন তবে আপনি পরে সমস্যার মধ্যে পড়তে পারেন। বিশেষত যদি আপনি বাধ্যতামূলক ইভেন্টগুলি শুরু করেন তবে সেগুলিতে ফিরে আসে। আরও তথ্যের জন্য এই পোস্টটি দেখুন: fuelyourcoding.com/jquery-events-stop-misusing-return-false

64
@dbme: জাভাস্ক্রিপ্টের কাজগুলি সর্বদা ফিরে আসে। যদি সরবরাহ না করা থাকে তবে রিটার্নের বিবৃতি অন্তর্ভুক্ত থাকে। ডিফল্ট রিটার্ন মান হয় undefinedএবং এটিই আমার প্রাথমিক সমাধান সরবরাহ করে। আপনার নিবন্ধটি নিবন্ধটি return falsejQuery ইভেন্ট হ্যান্ডলারে করার বিষয়ে কথা বলছে । এটি সম্পূর্ণ ভিন্ন বিষয়। এটি কোনও জাভাস্ক্রিপ্ট ফাংশন থেকে বেরিয়ে আসার সঠিক উপায়। স্পষ্টতই যদি কলার ফিরে আসা মানের উপর নির্ভর করে তবে মানটি যথাযথভাবে সংজ্ঞায়িত করা দরকার needs
ব্যবহারকারী 113716

3
... একটি অন্তর্নিহিত ভিন্নতা হবে if(a != 'stop') { /* run my code */ }যাতে কোডটি কেবল তখন চালিত হয় যখন aকোনও 'stop'স্পষ্টতা না দিয়ে সমান হয় না return। তবে ফেরতের মানটি আমার সমাধানের মতো । উভয় ক্ষেত্রেই, undefinedফেরত দেওয়া হবে।
ব্যবহারকারী 113716

3
দুর্দান্ত প্রতিক্রিয়া। আমি বুঝতে পারিনি যে অপরূপিত বনাম মিথ্যা বনাম ভিন্ন মানের ফেরতের মধ্যে কোনও পার্থক্য রয়েছে। আমি গত এক ঘন্টা ধরে এই আচরণ সম্পর্কিত একটি সুনির্দিষ্ট উত্তর খোঁজার চেষ্টা করছি। সুতরাং বলা কি নিরাপদ (আপনার বক্তব্যটি পুনরুত্পাদন করার জন্য) যে কলার ইভেন্টগুলি ইত্যাদির সাথে আবদ্ধ থাকলেও কোনও পদ্ধতি থেকে প্রস্থান করার 100% নিরাপদ উপায়?

@ ডিবিএম: আচ্ছা, এটি সমস্ত নির্ভর করে ফাংশনটি কল করার পদ্ধতি দ্বারা কী প্রত্যাশা করা হয়। যদি কিছু কোড লাইব্রেরি কোনও ইভেন্ট সিস্টেমটিকে সংজ্ঞায়িত করে যা যদি তা ফিরে আসবে undefined(বা এটি অন্য কোনও মান গ্রহণ করে না) ফেরত মূল্য হিসাবে গ্রহণ করে তবে আপনাকে সেই API এর স্পেসিফিকেশন মেনে চলতে হবে এবং সঠিক মানটি ফিরিয়ে দিতে হবে। সাধারণত ইভেন্ট হ্যান্ডলিং সিস্টেমের জন্য, undefinedহ্যান্ডলারটি শেষ হয়ে গেছে এমন একটি সাধারণ ইঙ্গিত হিসাবে এটি আশা করবে এবং এরপরে আর কোনও নির্দেশনা নেই। JQuery এর সাথে, return false;এর একটি করার preventDefaultএবং এর নির্দেশ দেওয়ার বিশেষ অর্থ রয়েছে stopPropagation
ব্যবহারকারী 113716

49

স্পষ্টতই আপনি এটি করতে পারেন:

function myFunction() {myFunction:{
    console.log('i get executed');
    break myFunction;
    console.log('i do not get executed');
}}

একটি লেবেল ব্যবহারের মাধ্যমে ব্লক স্কোপগুলি দেখুন: https://developer.mozilla.org/en-US/docs/Web/ জাভা স্ক্রিপ্ট / রেফারেন্স / স্ট্যাটমেন্টস / লেবেল

আমি এখনও কোনও ডাউনসাইড দেখতে পাচ্ছি না। তবে এটি সাধারণ ব্যবহারের মতো বলে মনে হচ্ছে না।

এই উত্তরটি প্রাপ্ত হয়েছে: পিএইচপি'র ডাইয়ের সমতুল্য জাভাস্ক্রিপ্ট


নোডেজ এক্সপোর্ট মডিউল সহ এই সমাধানটি ব্যবহার করা কি সম্ভব? যখন আমি এটি চেষ্টা করি তখন আমি "ব্যবহৃত না লেবেল" ত্রুটি পাই। রফতানি.আমার ফাংশন = ফাংশন (ডেটা) {আমার ফাংশন: {আমার ফাংশনটি ভাঙ্গা;}}
ইউরি আলমেডা

20
function myfunction() {
     if(a == 'stop') 
         return false;
}

return false; ন্যায়বিচার তুলনায় অনেক ভাল return;


13
কেন falseভাল? আমি বলব undefinedজেনেরিক ক্ষেত্রে ডিফল্টটি আরও ভাল। যেভাবেই হোক না কেন, আপনি এটি সঠিকভাবে বলেছিলেন যে কোনও অর্থবোধক মান ফেরত দেওয়া প্রায়শই ভাল।
ব্র্যাড কোচ

এটি প্রোগ্রামার এবং এটি ব্যবহারের ক্ষেত্রে নির্ভর করে to উদাহরণস্বরূপ, কোনও ফাংশন কোনও কিছুকে বৈধতা দিতে পারে, সুতরাং যদি বৈধতা ব্যর্থ হয় তবে এটির falseচেয়ে ফিরে আসার আরও অর্থ হয় undefined
অ্যাডাম ম্যাকআর্থার


11

কিছুটা ভিন্ন পদ্ধতির ব্যবহার করে আপনি try catchথ্রো স্টেটমেন্ট সহ ব্যবহার করতে পারেন ।

function name() {
    try {
        ...

        //get out of here
        if (a == 'stop')
            throw "exit";

        ...
    } catch (e) {
        // TODO: handle exception
    }
}

3

যদি কিছু ত্রুটি পাওয়া যায় তবে আপনি ফর্ম জমা দেওয়া এড়াতে কোনও স্ক্রিপ্ট সন্ধান করছেন, এই পদ্ধতিটি কাজ করা উচিত

function verifyData(){
     if (document.MyForm.FormInput.value.length == "") {
          alert("Write something!");
     }
     else {
          document.MyForm.submit();
     }
}

জমা বাটন টাইপটি "বোতাম" এ পরিবর্তন করুন

<input value="Save" type="button" onClick="verifyData()">

এই সাহায্য আশা করি।


2

একটি ব্যবহারের returnফলে ফাংশন বন্ধ হয়ে যাবে এবং ফিরে যাবে undefined, অথবা যে মানটি আপনি রিটার্ন কমান্ডের সাহায্যে নির্দিষ্ট করেছেন।

function myfunction(){
    if(a=="stop"){
        //return undefined;
        return; /** Or return "Hello" or any other value */
    }
}

1

সত্যিকারের সমাধান নয় এমন বিষয়গুলির উত্তর দেওয়া আমি পছন্দ করি না ...

... তবে যখন আমি এই একই সমস্যার মুখোমুখি হয়েছি তখন আমি নীচে কাজটি করেছি:

function doThis() {
  var err=0
  if (cond1) { alert('ret1'); err=1; }
  if (cond2) { alert('ret2'); err=1; }
  if (cond3) { alert('ret3'); err=1; }
  if (err < 1) {
    // do the rest (or have it skipped)
  }
}

আশা করি এটি যে কারও পক্ষে কাজে লাগতে পারে।


Duh। এতো সহজ আমি কখনই ভাবিনি !! বড় নেস্টেড আইএফ এড়ানোর জন্য বেশ দরকারী। ধন্যবাদ।
ডেবি এ

এটি একটি স্যুইচ সঙ্গে ভাল হবে।
বিডেলমাস

নির্ভর করে যদি আপনি একবারে সমস্ত ত্রুটি সতর্কতা একবারে করতে চান, কেবলমাত্র একজনকে জানানো হবে। তবে প্রতিটি শর্তটি যেভাবেই সম্পাদন করা দরকার।
লিও

0

আমি মনে করি যে একটি নতুন ত্রুটি নিক্ষেপ করা কেবলমাত্র প্রত্যাবর্তন বা মিথ্যা প্রত্যাবর্তনের পরিবর্তে মৃত্যুদন্ড কার্যকর করা বন্ধ করা ভাল পদ্ধতির। প্রাক্তন জন্য। আমি বেশ কয়েকটি ফাইল যাচাই করছি যা আমি পৃথক ফাংশনে আপলোড করার জন্য সর্বোচ্চ পাঁচটি ফাইলকে অনুমতি দিই।

validateMaxNumber: function(length) {
   if (5 >= length) {
        // Continue execution
   }
   // Flash error message and stop execution
   // Can't stop execution by return or return false statement; 
   let message = "No more than " + this.maxNumber + " File is allowed";
   throw new Error(message);
}

তবে আমি এই ফাংশনটিকে মূল ফ্লো ফাংশন থেকে কল করছি

  handleFilesUpload() {
      let files =  document.getElementById("myFile").files;
      this.validateMaxNumber(files.length);
}

উপরের উদাহরণে আমি কার্যকর করতে বাধা দিতে পারি না যদি না আমি নতুন ত্রুটি নিক্ষেপ করি J জাস্ট রিটার্ন বা মিথ্যা প্রত্যাবর্তন কেবল তখনই কাজ করে যদি আপনি মৃত্যুদন্ডের মূল ফাংশনে থাকেন অন্যথায় এটি কাজ করে না।



-4

আপনি jquery ব্যবহার করা হয়। এটি ফাংশনটি বুদবুদ হওয়া থেকে থামিয়ে দেওয়া উচিত যাতে এটি কল করা প্যারেন্ট ফাংশনটিও বন্ধ হয়ে যায়।

  function myfunction(e)
  {
       e.stopImmediatePropagation();
       ................
  }

6
stopImmediatePropagation()কোনও jQuery জিনিস নয়, এবং প্রচার বন্ধ করা কোনও ফাংশন থেকে বেরিয়ে আসার মতো নয়।
ব্র্যাড কোচ

-13

কোনও ত্রুটি ছুঁড়ে এমন কোনও র্যান্ডম কমান্ড টাইপ করুন, উদাহরণস্বরূপ:

exit

অথবা

die:-)

এটি কেবলমাত্র বাকী ফাংশনটিই নয়, সমস্ত কোড কার্যকর করতে বাধা দিতে পারে stop ফ্রেড পরীক্ষা করুন: jsfiddle.net/b3k0xo7n/1
ট্রেকন

1
কি ভয়ানক প্রোগ্রামিং পদ্ধতির। একই কোডবাসে কাজ করে এমন অন্য বিকাশকারীর পক্ষে এটি কীভাবে স্বজ্ঞাত?
অসুলিক
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.