2011-06-25 13 views
10

मुझे आश्चर्य है कि ईवेंट-लूप जावास्क्रिप्ट में कैसे काम करता है, मैं node.js का उपयोग कर रहा हूं लेकिन मुझे लगता है कि वही प्रश्न ब्राउज़र पर लागू होता है।जावास्क्रिप्ट इवेंट-लूप प्रश्न

मैं कुछ async फोन है और एक के बाद जबकि घटना लूप अब जब callback निष्पादित हो रही है callback

कार्यान्वित करता है, क्या दृश्य के पीछे क्या होता (मान लीजिए कि setTimeout या $.ajax या fs.readFile हैं)? क्या यह उस स्टैक को पुनर्जीवित करता है जिसका उपयोग यह एसिंक सामग्री को लागू करते समय किया जाता था?

अभ्यास में संदर्भ/यह क्या है कि कॉलबैक रह रहा है? और यह कैसे काम करता है?

संपादित: धन्यवाद, मैं देख रहा हूँ .. बस एक और मुद्दा है, कैसे घटना पाश "याद" करता है एक कॉलबैक के दायरे?

+1

नहीं। जावास्क्रिप्ट ढेर को पुनर्जीवित नहीं करता है। क्लोजर कैसे काम करता है इस पर पढ़ें। – Nican

+1

यह उपयोग का हो सकता है: (http://stackoverflow.com/questions/183214/javascript-callback-scope)। और एक प्रासंगिक jQuery फ़ंक्शन के लिए: (http://api.jquery.com/jQuery.proxy/) –

उत्तर

2

जावास्क्रिप्ट फ़ंक्शन स्कोपिंग का उपयोग करता है, स्कॉइंग नियम सभी जेएस वातावरण में समान हैं। जैसा कि निकन ने समझ लिया है कि आपके मौजूदा दायरे में क्या उपलब्ध है यह जानने के लिए समझ बंद करना महत्वपूर्ण है।

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

कुछ संसाधन:

Stoyan Stefanov की किताब वस्तु उन्मुख जावास्क्रिप्ट जावास्क्रिप्ट में स्कोपिंग समझाते हुए और lexical scoping कार्यों के काम का वर्णन करने का एक अच्छा काम करता है (अध्याय 4 देखें)। मैं जेएस प्रोग्रामिंग के बारे में गंभीर किसी भी व्यक्ति को पुस्तक की सिफारिश करता हूं।

+0

इवेंट लूप कॉलबैक के दायरे को "याद करता है" कैसे करता है? –

+1

@browsingLoops: कॉलबैक स्वयं को दायरे को याद करता है। फ़ंक्शन * परिभाषा * पर, फ़ंक्शन बाहरी फ़ंक्शन (यदि मौजूद है) की स्कोप श्रृंखला प्राप्त करता है। [विनिर्देश] पर एक नज़र डालें (http://ecma262-5.com/ELS5_HTML.htm#Section_13)। फ़ंक्शन घोषणा के लिए यह कहता है: * "13.2 में निर्दिष्ट एक नई फंक्शन ऑब्जेक्ट बनाने के परिणाम को 'फॉर्मल पैरामीटर लिस्टोपेट' द्वारा निर्दिष्ट पैरामीटर के साथ, और 'फंक्शनबॉडी' द्वारा निर्दिष्ट निकाय के परिणाम को वापस लौटाएं। ** चल रहे निष्पादन संदर्भ के 'चरणीय पर्यावरण' में पास करें 'स्कोप' के रूप में। "*** –

0

वहाँ एक अच्छा Javascript Loupe कहा जाता है आप को समझने में मदद कैसे जावास्क्रिप्ट के कॉल स्टैक/घटना और प्रत्येक other.Write संपादक में जावास्क्रिप्ट कोड के कुछ टुकड़े के साथ पाश/कॉलबैक intereact और इसे चलाने के लिए कोशिश करेंगे कि फिलिप रॉबर्ट्स द्वारा बनाई गई उपकरण है।