क्या आप जावास्क्रिप्ट में नेस्टेड फ़ंक्शन लिख सकते हैं?


116

मुझे आश्चर्य हो रहा है कि यदि जावास्क्रिप्ट किसी अन्य फ़ंक्शन या नेस्टेड फ़ंक्शन के भीतर फ़ंक्शन लिखने का समर्थन करता है (मैंने इसे एक ब्लॉग में पढ़ा है)। क्या यह वास्तव में संभव है? वास्तव में, मैंने इनका उपयोग किया है लेकिन इस अवधारणा के बारे में अनिश्चित हूं। मैं वास्तव में इस पर स्पष्ट नहीं हूँ - कृपया मदद करें!

जवाबों:


197

क्या यह वास्तव में संभव है।

हाँ।

function a(x) {    // <-- function
  function b(y) { // <-- inner function
    return x + y; // <-- use variables from outer scope
  }
  return b;       // <-- you can even return a function.
}
console.log(a(3)(4));


23
इस विधि को करींग कहा जाता है।
येकेवर

क्या यह कोड इस के बराबर है?
ऐनी ओर्टिज़

function a (x) {// <- function return {calc: function (y) {// <- inner function return x * y; // <- रिटर्न x का उपयोग बाहरी क्षेत्र से चर}}; console.log (क (3) (4));
ऐनी ओर्टिज़

29

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

var foo = function () { alert('default function'); }

function pickAFunction(a_or_b) {
    var funcs = {
        a: function () {
            alert('a');
        },
        b: function () {
            alert('b');
        }
    };
    foo = funcs[a_or_b];
}

foo();
pickAFunction('a');
foo();
pickAFunction('b');
foo();

4
महान उदाहरण है। मैं जोड़ूंगा कि यह नोट करना महत्वपूर्ण है कि अन्य फ़ंक्शन के अंदर परिभाषित फ़ंक्शन केवल उस फ़ंक्शन स्कोप में मौजूद हैं (जब तक कि, निश्चित रूप से, आप इस उदाहरण के अनुसार, इसे एक वैश्विक फ़ंक्शन असाइन करते हैं)।
माइक शेरोव

5
उन कार्यों को उन वस्तुओं की तरह मानें जो वे हैं
एलेक्स लोमिया

17

कार्य प्रथम श्रेणी की वस्तुएं हो सकती हैं:

  • अपने कार्य के भीतर परिभाषित
  • आपके फ़ंक्शन के किसी भी बिंदु पर किसी भी अन्य चर या ऑब्जेक्ट की तरह बनाया गया
  • अपने कार्य से लौटे (जो उपरोक्त दोनों के बाद स्पष्ट लग सकता है, लेकिन फिर भी)

केनी द्वारा दिए गए उदाहरण पर निर्माण करने के लिए:

   function a(x) {
      var w = function b(y) {
        return x + y;
      }
      return w;
   };

   var returnedFunction = a(3);
   alert(returnedFunction(2));

5 से आपको सचेत करेगा।


5
इस विधि को करींग कहा जाता है।
येकेवर

14

हां, एक फ़ंक्शन को किसी अन्य फ़ंक्शन में नेस्टेड लिखना और कॉल करना संभव है।

इसे इस्तेमाल करे:

function A(){
   B(); //call should be B();
   function B(){

   }
}

11

न केवल आप एक फ़ंक्शन को वापस कर सकते हैं जिसे आप किसी अन्य फ़ंक्शन में एक चर के रूप में पारित कर चुके हैं, आप इसे अंदर गणना के लिए भी उपयोग कर सकते हैं लेकिन इसे बाहर परिभाषित कर सकते हैं। इस उदाहरण को देखें:

    function calculate(a,b,fn) {
      var c = a * 3 + b + fn(a,b);
      return  c;
    }

    function sum(a,b) {
      return a+b;
    }

    function product(a,b) {
      return a*b;
    }

    document.write(calculate (10,20,sum)); //80
    document.write(calculate (10,20,product)); //250

1
मैं ajax
jscripter
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.