2011-02-06 6 views
49

संभावित डुप्लिकेट (अंतर है?):
What is Closures/Lambda in PHP or Javascript in layman terms?
What is the difference between a 'closure' and a 'lambda'?बंद बनाम बेनामी समारोह

हाय,

मैं एक परिभाषा है कि स्पष्ट रूप से बताते हैं खोजने में असमर्थ किया गया है एक बंद और एक अज्ञात समारोह के बीच मतभेद।

मैंने जो अधिक संदर्भ देखा है, वे स्पष्ट रूप से निर्दिष्ट करते हैं कि वे अलग-अलग "चीजें" हैं, फिर भी मुझे अपने सिर को क्यों नहीं मिल रहा है।

क्या कोई इसे मेरे लिए सरल बना सकता है? इन दो भाषा सुविधाओं के बीच विशिष्ट मतभेद क्या हैं? कौन सा परिदृश्य में अधिक उपयुक्त है?

+2

नहीं लेकिन यह http://stackoverflow.com/questions/220658/what-is-the-difference-between-a-closure-and-a-lambda मेरा बुरा –

उत्तर

74

एक अज्ञात फ़ंक्शन केवल एक फ़ंक्शन है जिसका नाम नहीं है; और कुछ नहीं। एक बंद करना एक ऐसा कार्य है जो आसपास के पर्यावरण की स्थिति को पकड़ता है।

एक अज्ञात फ़ंक्शन को बंद करने की आवश्यकता नहीं होती है, और एक क्लोजर केवल अज्ञात कार्यों के लिए नहीं बनाया जाता है।

इस hypothetical काउंटर उदाहरण पर विचार करें। एक भाषा फू पर विचार करें जो बंद करने का समर्थन नहीं करता है लेकिन अनाम कार्यों का समर्थन करता है। यह भाषा या तो नीचे दिए गए कोड के लिए एक त्रुटि संकलित या फेंक नहीं सकती है क्योंकि "ग्रीटिंग" को आंतरिक फ़ंक्शन के दायरे में परिभाषित नहीं किया गया है। तथ्य यह है कि यह अज्ञात है अप्रासंगिक है।

function outer() { 
    var greeting = "hello "; 

    (function(name) { 
     alert(greeting + name); 
    })("John Doe"); 
} 

की एक वास्तविक भाषा अब करता है समर्थन बंद पर विचार करें - जावास्क्रिप्ट। उपर दिए गए उदाहरण लें, लेकिन इस बार भीतरी समारोह नामकरण देता है:

function outer() { 
    var greeting = "hello "; 

    (function inner(name) { 
     alert(greeting + name); 
    })("John Doe"); 
} 

हालांकि आंतरिक समारोह अब और अनाम नहीं है, यह अभी भी राज्य के आसपास के वातावरण से कैप्चर करता है।

क्लोजर बहुत आवश्यक सुविधा प्रदान करते हैं, अन्यथा हम कार्य की प्रत्येक निर्भरता को तर्क के रूप में पारित करेंगे।

function outer() { 
    var greeting = "hello "; 

    (function(name, greeting) { 
     alert(greeting + name); 
    })("John Doe", greeting); 
} 
+0

आप अदालत में तलब कर सकते हैं का डुप्लिकेट है आपके उत्तर में उपयोग की जाने वाली परिभाषाओं के लिए कुछ स्रोत? – Pacerier

+0

@Pacerier मैंने प्रश्न में पहले से संदर्भित किए गए किसी भी परिभाषा के अलावा किसी भी परिभाषा का उपयोग नहीं किया है, और यह मूल रूप से 'बंद' और 'अज्ञात कार्य' है। मैं अपने उदाहरणों के साथ आया, इसलिए उन लोगों के लिए बाहरी संदर्भ प्रदान नहीं कर सकते हैं। – Anurag

+0

मेरा मतलब है कि विकिपीडिया आदि – Pacerier