সমাধানটি হ'ল বন্ধের মাধ্যমে ভেরিয়েবলের বাঁধাই।
আরও মৌলিক উদাহরণ হিসাবে, এখানে একটি উদাহরণ ফাংশন যা কলব্যাক ফাংশনটি গ্রহণ করে এবং কল করে, পাশাপাশি একটি উদাহরণ কলব্যাক ফাংশন:
function callbackReceiver(callback) {
callback("Hello World");
}
function callback(value1, value2) {
console.log(value1, value2);
}
এটি কলব্যাককে কল করে এবং একটি একক যুক্তি সরবরাহ করে। এখন আপনি অতিরিক্ত যুক্তি সরবরাহ করতে চান, তাই আপনি কলব্যাকটি বন্ধ করে মোড়ক করুন।
callbackReceiver(callback); // "Hello World", undefined
callbackReceiver(function(value) {
callback(value, "Foo Bar"); // "Hello World", "Foo Bar"
});
বা, আরও সহজভাবে ES6 তীর ফাংশন ব্যবহার করে :
callbackReceiver(value => callback(value, "Foo Bar")); // "Hello World", "Foo Bar"
আপনার নির্দিষ্ট উদাহরণ হিসাবে, আমি .post
jQuery এ ফাংশনটি ব্যবহার করি নি , তবে ডকুমেন্টেশনের একটি দ্রুত স্ক্যান থেকে বোঝা যায় যে কলটি পিছনে নিম্নলিখিত স্বাক্ষর সহ ফাংশন পয়েন্টার হওয়া উচিত :
function callBack(data, textStatus, jqXHR) {};
অতএব আমি মনে করি সমাধানটি নিম্নরূপ:
var doSomething = function(extraStuff) {
return function(data, textStatus, jqXHR) {
// do something with extraStuff
};
};
var clicked = function() {
var extraStuff = {
myParam1: 'foo',
myParam2: 'bar'
}; // an object / whatever extra params you wish to pass.
$.post("someurl.php", someData, doSomething(extraStuff), "json");
};
কি হচ্ছে?
শেষ লাইনে, অনুরোধ doSomething(extraStuff)
করা হয় এবং সেই অনুরোধের ফলাফলটি একটি ফাংশন পয়েন্টার ।
কারণ extraStuff
এটি হিসাবে একটি আর্গুমেন্ট হিসাবে পাস doSomething
হয় doSomething
ফাংশন সুযোগ ।
এটির extraStuff
ফেরত বেনামে অভ্যন্তরীণ ফাংশনটি কখন রেফারেন্স করা doSomething
হয় তা বাহ্যিক ফাংশনের extraStuff
যুক্তির সাথে বন্ধ হয়ে আবদ্ধ । doSomething
ফিরে আসার পরেও এটি সত্য ।
আমি উপরের পরীক্ষা করেছি না, তবে আমি গত 24 ঘন্টা খুব অনুরূপ কোড লিখেছি এবং আমি বর্ণিত হিসাবে এটি কাজ করে।
আপনি অবশ্যই আপনার ব্যক্তিগত পছন্দ / কোডিং মানের উপর নির্ভর করে একক 'এক্সট্রা স্টাফ' অবজেক্টের পরিবর্তে একাধিক ভেরিয়েবলগুলি পাস করতে পারেন।