अगर मैं आपके प्रश्न को सही ढंग से समझ पाया, तो आप डायनामिक स्कोपिंग ढूंढ रहे हैं। . जावास्क्रिप्ट को शाब्दिक रूप से स्कोप किया गया है, इसलिए किसी वैरिएबल को कैप्चर करने के लिए, क्लोजर टेक्स्ट के रूप में इसके दायरे में होना चाहिए। अन्यथा, यह संभव नहीं है, उदाहरण के लिए, अधिक या कम मूर्खतापूर्ण चालों की गिनती नहीं करना:
function makeClosure(context) {
return function() {
return context("a") + 1;
};
}
function y(evalThis) {
var a = 2;
if(evalThis)
return eval(evalThis);
return makeClosure(y);
}
closure = y();
document.write(closure()) // 3
यह भी देखें eva">क्या eval का सहारा लिए बिना जावास्क्रिप्ट में गतिशील स्कोपिंग प्राप्त करना संभव है? अधिक चर्चा और उदाहरणों के लिए।
विशेष रूप से आपके मोंगोडीबी प्रश्न के अनुसार, शुद्ध जावास्क्रिप्ट में कुछ फ़ंक्शन के दायरे में एक चर को इंजेक्ट करना संभव नहीं है (फिर से, eval का उपयोग किए बिना)। लेकिन मोंगो का नक्शा-कमी सी ++ में लिखा गया है, जेएस में नहीं, और मनमाने तरीके से दायरे में हेरफेर कर सकता है:
_scope->setFunction("emit", etc
देखें स्रोत ।
पूर्णता के लिए, यहां eval
. के साथ एक उदाहरण दिया गया है :
function map(ary, fun) {
// define some locals
var LOCAL = 42;
// re-evaluate the function within the scope
eval("fun=" + fun);
// now fun sees our locals
return ary.map(fun);
}
document.write(
map([1,2,3], function(x) { return x * LOCAL }) // [ 42, 84, 126 ]
)