function helloTranslator(String helloWord)
{
return function(String name)
{
return "#helloWord#, #name#";
};
}
यहाँ helloWord
और name
scoped नहीं किया जा सकता। "फंक्शन के भीतर परिभाषित बंद" के साथ एक अंतर्निहित Owner
स्कोप है जो घोषित करने (स्थानीय) फ़ंक्शन का स्थानीय दायरा है, जहां ये चर मौजूद हैं। इसलिए इन चरों को बंद होने से एक्सेस करने के लिए अद्वितीय (फ़ंक्शन के भीतर) होना चाहिए।
बंद में, एक unscoped चर के लिए खोज के माध्यम से चला जाता है:
- बंद के स्थानीय गुंजाइश
- बंद के तर्कों गुंजाइश
- बाहरी/स्वामी समारोह के स्थानीय गुंजाइश यदि उपलब्ध
- बाहरी/स्वामी समारोह के तर्क गुंजाइश यदि उपलब्ध
- वैरिएबल स्कोप (बंद करने के समय उपलब्ध उपलब्ध)
- कोल्डफू सायन बिल्ट-इन स्कोप
अगर कुछ बंद होने पर Local
के रूप में स्कॉप्ड किया गया है, तो यह केवल 1 में खोजेगा। एएफएन के पास 3,4 के लिए सीधे गुंजाइश करने का कोई तरीका नहीं है।
पेज। जैसा कि पहले कहा गया था Owner
गुंजाइश एक अंतर्निहित दायरा नहीं है जो बंद करने के निर्माण के समय माता-पिता/बाहरी कार्य के स्थानीय दायरे की कैश की गई प्रति को इंगित करता है।
पेज। इस दायरे को स्पष्ट करने के लिए आप log an enhancement with ColdFusion कर सकते हैं।
विभिन्न क्षेत्रों का एक उदाहरण निम्नानुसार है। इसे चलाएं और आप समझ जाएंगे कि क्लोजर अलग-अलग क्षेत्रों का उपयोग कैसे करेगा।
any function exampleClosureForm(arg1){
function x(innerArg1,innerArg2){
//var arg1= 50;// will hide parent's arg1 if declared
writedump(arguments);// would dump closure's
writedump(local);// would dump closure's
writedump(session.a); // would be same session shared across
writedump(arg1); // would dump parents argument arg1
return session.a-- + innerArg1+innerArg2+arg1--;// decrementing to see its behavior for successive call
};
writeoutput(x(1,2));
writedump(arguments,"browser","html",false,"function");// would dump parent's
writedump(local,"browser","html",false,"function");// would dump parent's
arg1 = -100; // since closure is sharing the parent's variable, this change should get reflected
return x;
}
session.a = 10;
a = exampleClosureForm(10);
writeoutput("now the calls <br>");
writeoutput(a(innerArg1=5,innerArg2=5));
writeoutput("<br>");
// with argumentcollection
argsColl = structNew();
argsColl.innerArg1= 1;
argsColl.innerArg2= 3;
writeoutput(a(argumentCollection = argsColl));
स्रोत
2012-05-16 11:02:04
आप एक और अधिक पूरा कोड उदाहरण प्रदान करें सकते हैं, तो लेबल जो वर जो गुंजाइश के हैं? और बंद करने के निर्माण के समय क्या var उपलब्ध है? शायद इस विषय पर एक ब्लॉग पोस्ट? यह भ्रमित हो रहा है। धन्यवाद। – Henry
ईआर दायर: https://bugbase.adobe.com/index.cfm?event=bug&id=3191742 – Henry
@ हेनरी उदाहरण टिप्पणी में फिट नहीं होगा इसलिए मैं इसके लिए एक अलग जवाब डाल रहा हूं –