समाधान क्लोजर के माध्यम से चर का बंधन है।
अधिक बुनियादी उदाहरण के रूप में, यहां एक उदाहरण फ़ंक्शन है जो कॉलबैक फ़ंक्शन को प्राप्त करता है और कॉल करता है, साथ ही एक उदाहरण कॉलबैक फ़ंक्शन:
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 घंटों में बहुत समान कोड लिखा है और जैसा मैंने बताया है, यह काम करता है।
आप निश्चित रूप से अपनी व्यक्तिगत पसंद / कोडिंग मानकों के आधार पर एक 'एक्स्ट्रास्टफ' ऑब्जेक्ट के बजाय कई चर पास कर सकते हैं।