আপনি কি জাভাস্ক্রিপ্টে নেস্টেড ফাংশনগুলি লিখতে পারেন?


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
এই পদ্ধতিটিকে কারিঙ বলা হয়।
ইয়েকভার

এই কোডটি কি এটির সাথে সমান?
অ্যান অর্টিজ

ফাংশন a (x) {// <- ফাংশন রিটার্ন {গণনা: ফাংশন (y) {// <- অভ্যন্তরীণ ফাংশন রিটার্ন x * y; // <- রিটার্ন এক্স বহিরাগত স্কোপ থেকে পরিবর্তনশীল}}; console.log (ক (3) (4));
অ্যান অর্টিজ

29

নিম্নলিখিতটি কদর্য, তবে আপনি যে কোনও অন্য ধরণের অবজেক্টের মতো ফাংশনগুলি কীভাবে আচরণ করতে পারেন তা প্রদর্শন করে ves

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
Functions ফাংশনগুলি যেমন তারা হয়
তেমন

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
আমি
আজাক্স
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.