मैं XMLHttpRequest का उपयोग कर रहा हूं, और मैं सफलता कॉलबैक फ़ंक्शन में स्थानीय चर का उपयोग करना चाहता हूं।जावास्क्रिप्ट कॉलबैक को कैसे व्यवस्थित करें ताकि फ़ंक्शन स्कोप ठीक से बनाए रखा जा सके
यहाँ कोड है:
function getFileContents(filePath, callbackFn) {
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function() {
if (xhr.readyState == 4) {
callbackFn(xhr.responseText);
}
}
xhr.open("GET", chrome.extension.getURL(filePath), true);
xhr.send();
}
और मैं इसे इस तरह कॉल करना चाहते हैं:
var test = "lol";
getFileContents("hello.js", function(data) {
alert(test);
});
यहाँ, test
कॉलबैक फ़ंक्शन के दायरे से बाहर हो सकता है, केवल संलग्नित के बाद से फ़ंक्शन के चर कॉलबैक फ़ंक्शन के अंदर पहुंच योग्य हैं। test
को कॉलबैक फ़ंक्शन पर पास करने का सबसे अच्छा तरीका क्या है alert(test);
test
सही ढंग से प्रदर्शित करेगा?
संपादित करें:
अब, मैं निम्नलिखित कोड समारोह ऊपर परिभाषित बुला अगर:
for (var test in testers) {
getFileContents("hello.js", function(data) {
alert(test);
});
}
alert(test);
कोड केवल for
पाश से test
का अंतिम मान प्रिंट करता है। मैं इसे कैसे बना सकता हूं ताकि यह test
के मान को उस समय के दौरान प्रिंट करता है जिस पर फ़ंक्शन getFileContents
कहा जाता था? (मैं getFileContents
बदल रहा है, क्योंकि यह एक बहुत ही सामान्य सहायक समारोह है और मैं इसे करने के लिए test
की तरह एक विशिष्ट चर पारित करके यह विशिष्ट बनाने के लिए नहीं करना चाहते हैं के बिना यह कर करना चाहते हैं।
यह भी देखें: http://stackoverflow.com/questions/tagged/javascript+closures+loops – CMS