"यदि कोई कर्मचारी अपना काम अच्छी तरह से करना चाहता है, तो उसे पहले अपने औजारों को तेज करना होगा।" - कन्फ्यूशियस, "द एनालेक्ट्स ऑफ कन्फ्यूशियस। लू लिंगगोंग"
मुखपृष्ठ > प्रोग्रामिंग > निष्पादन संदर्भ और कॉल स्टैक

निष्पादन संदर्भ और कॉल स्टैक

2024-11-08 को प्रकाशित
ब्राउज़ करें:968

Execution Context & Call Stack

शीर्ष स्तर के कोड के लिए वैश्विक निष्पादन संदर्भ का निर्माण यानी वह कोड जो किसी एफएन के अंदर नहीं है। इसलिए, fn के बाहर का कोड पहले निष्पादित किया जाता है।
Fn-decln/exprsn के fn बॉडी के अंदर कोड केवल तभी निष्पादित होता है जब इसे कॉल किया जाता है।

निष्पादन संदर्भ(ईसी)

वह वातावरण जिसमें जेएस का टुकड़ा निष्पादित किया जाता है।
कुछ कोड को स्थानीय चर की तरह निष्पादित करने के लिए सभी आवश्यक जानकारी संग्रहीत करता है, एफएन को पास किए गए तर्क।
JS कोड हमेशा EC के अंदर चलता है।
जेएस परियोजना के आकार की परवाह किए बिना बिल्कुल एक वैश्विक ईसी।
डिफ़ॉल्ट संदर्भ, किसी भी fn के अंदर नहीं कोड के लिए बनाया गया।
फिर कोड को वैश्विक EC के अंदर निष्पादित किया जाता है
शीर्ष स्तरीय कोड निष्पादित होने के बाद, एफएनएस का निष्पादन और सी/बीएस की प्रतीक्षा
प्रत्येक fn कॉल के लिए, उस fn को निष्पादित करने के लिए एक नया EC बनाया जाता है। यही बात तरीकों पर भी लागू होती है, क्योंकि वे भी वस्तुओं से जुड़े हुए होते हैं।
ये सभी ईसी मिलकर कॉल स्टैक बनाते हैं।
जब सभी एफएनएस निष्पादित हो जाते हैं, तो इंजन सीबी के आने और उन्हें निष्पादित करने की प्रतीक्षा करता है। पूर्व। इवेंट लूप द्वारा प्रदान किए गए इवेंट कॉलबैक पर क्लिक करें।

ईसी के अंदर क्या है

  1. परिवर्तनीय पर्यावरण जिसमें शामिल है
  2. चलो, स्थिरांक, var घोषणाएँ
  3. कार्य
  4. तर्क वस्तु: एफएन को दिए गए सभी तर्कों को अपने ईसी में संग्रहीत करता है।
    प्रत्येक एफएन को अपना स्वयं का ईसी मिलता है जैसा कि कहा जाता है। और घोषित किए गए चर परिवर्तनीय वातावरण में समाप्त होते हैं

  5. स्कोप श्रृंखला:
    एफएनएस स्कोप चेन का उपयोग करके एफएनएस के बाहर वेरिएबल्स तक पहुंच सकते हैं।
    इसमें वर्तमान एफएन के बाहर स्थित चर के संदर्भ शामिल हैं और स्कोप श्रृंखला का ट्रैक रखने के लिए, इसे प्रत्येक ईसी में संग्रहीत किया जाता है।

  6. प्रत्येक ईसी को 'यह' कीवर्ड भी मिलता है।

उपरोक्त ये तीनों "निर्माण चरण" के दौरान, निष्पादन से ठीक पहले उत्पन्न होते हैं। कोड को शीर्ष स्तर पर चलाने के लिए ये आवश्यक चीज़ें हैं।

एरो एफएनएस ईसी के लिए:

हमारे पास: तर्क वस्तु, यह कीवर्ड नहीं होगा। एरो एफएनएस अपने निकटतम नियमित एफएन, उपरोक्त दो से उपयोग करते हैं।

तर्क: वस्तु की तरह सरणी, जिसमें नियमित एफएन में पारित सभी तर्क शामिल हैं, तीर एफएन नहीं।

कॉल स्टैक मेमोरी हीप = जेएस इंजन

स्टैक को कॉल करें

वह स्थान जहां ईसी एक-दूसरे के ऊपर रखे जाते हैं, ताकि यह पता चल सके कि हम निष्पादन में कहां हैं। सबसे शीर्ष ईसी वह है जिसे हम चला रहे हैं। जैसे ही निष्पादन समाप्त हो जाता है, इसे स्टैक के शीर्ष से हटा दिया जाता है और नियंत्रण अंतर्निहित ईसी को स्थानांतरित कर दिया जाता है।
यदि कोई नेस्टेड एफएन कॉल है, तो बाहरी एफएन कॉल को रोक दिया जाएगा ताकि कॉल स्टैक पर आंतरिक एफएन के निष्पादन का परिणाम वापस आ सके क्योंकि जेएस में निष्पादन का केवल एक थ्रेड है। अब पिछला EC सक्रिय EC बन जाएगा
फिर शीर्ष-सबसे ईसी कॉल स्टैक से वापस आते ही पॉप हो जाता है।
कॉल स्टैक में सबसे नीचे वैश्विक ईसी होगी, शीर्ष पर एफएन कॉलें होंगी जैसा कि वे क्रम में होती हैं।
यह सुनिश्चित करता है कि निष्पादन का क्रम कभी नष्ट न हो।
अंत में, कार्यक्रम समाप्त हो जाएगा और वैश्विक ईसी भी कॉल स्टैक से बाहर आ जाएगा।

JS कोड EC के अंदर चलता है, जिसे कॉल स्टैक पर रखा जाता है।

Hence, we can say that each EC has:
1. Variable environment
2. Scope chain
3. 'this' keyword

देखते हुए

हमारे प्रोग्राम वेरिएबल्स को जेएस इंजन द्वारा कैसे व्यवस्थित और एक्सेस किया जाता है।
चर कहाँ रहते हैं
हम एक निश्चित वेरिएबल्स को कहां एक्सेस कर सकते हैं और कहां नहीं।

लेक्सिकल स्कोपिंग:

जेएस में लीकिकल स्कोपिंग है जिसका मतलब है कि स्कोपिंग को कोड में एफएनएस और ब्लॉक के प्लेसमेंट द्वारा नियंत्रित किया जाता है।
पूर्व। एक नेस्टेड fn के पास अपने मूल fn के वेरिएबल्स तक पहुंच होती है।

दायरा:

अंतरिक्ष या पर्यावरण जिसमें एक निश्चित चर घोषित किया गया है (एफएनएस के मामले में परिवर्तनीय वातावरण)। यह वेरिएबल env है जो fns EC में संग्रहीत है।
एफएनएस के लिए, वार एनवी और स्कोप दोनों समान हैं।

Three scopes in JS are:
1. Global scope
2. Fn scope
3. Block scope [ES6]

स्कोप वह स्थान है जहां वेरिएबल घोषित किए जाते हैं। इसलिए, एफएनएस के लिए भी सच है क्योंकि एफएनएस केवल वेरिएबल्स में संग्रहीत मान हैं।

एक वेरिएबल का दायरा

हमारे कोड का क्षेत्र जहां एक निश्चित वेरिएबल तक पहुंचा जा सकता है।

सूक्ष्म अंतर के साथ दायरा एक चर के दायरे से भिन्न होता है।

## Global Scope:
For top level code
For variables declared outside of any fn or block which are accessible from everywhere
Variables in this scope are at the top of scope chain. Hence, can be used by every nested scope.
## Fn Scope:
Each fn has creates its own scope
Variables are accessible ONLY inside fn, NOT outside. Else Reference Error
Also called local scope
Fn decln, exprsn, arrow all three create their own scopes.
Only way to create scope using ES5 which had only fn & global scope.
## Block Scope:
Introduced in ES6, not only fn but {} also create a scope known as block scope which work only for ES6 variables i.e let-const types. DOesn't work for variables declared with 'var' as its fn scoped.
Variables accessible only inside block i.e {} 
This only applies to variables declared with let-const only.
Fns are also block scoped in ES6 (only in strict mode, should be used)
variables declared using 'var' will be accessible outside the block
Scoped to the current fn or the global scope.
var variables only care about fn, they ignore blocks. They end up in nearest fn scope.

प्रत्येक नेस्टेड स्कोप के पास उसके बाहरी दायरे और वैश्विक दायरे से चर तक पहुंच होती है। यही बात fn तर्कों पर भी लागू होती है।

यदि किसी एफएन को अपने दायरे में वेरिएबल नहीं मिलता है, तो वह अपने बाहरी दायरे में वेरिएबल्स का पता लगाने के लिए स्कोप श्रृंखला को देखता है। इस प्रक्रिया को स्कोप चेन में वेरिएबल लुकअप कहा जाता है। यह दूसरे तरीके से काम नहीं करता है यानी हम एफएन या बाहरी स्कोप के बाहर से नेस्टेड एफएन वेरिएबल्स या स्कोप्स तक नहीं पहुंच सकते हैं।
सिबलिंग स्कोप एक-दूसरे के वेरिएबल्स तक नहीं पहुंच सकते
केवल अंतरतम दायरा ही इसके बाहरी दायरे तक पहुंच सकता है, इसके विपरीत नहीं।

प्रत्येक एफएन के लिए एक ईसी, जिस क्रम में एफएन को कॉल किया जाता है, उसे ईसी के अंदर इसके वेरिएबल्स के साथ कॉल स्टैक पर रखा जाता है। ग्लोबल ईसी कॉल स्टैक में सबसे नीचे है

स्कोप श्रृंखला:
यह सब उस क्रम के बारे में है जिसमें एफएनएस कोड में लिखे गए हैं।
इसका उस क्रम से कोई लेना-देना नहीं है जिसमें एफएनएस को बुलाया गया था।
स्कोप श्रृंखला को ईसी से परिवर्तनशील वातावरण मिलता है।
एफएन कॉल का ऑर्डर स्कोप श्रृंखला के लिए बिल्कुल भी प्रासंगिक नहीं है।

const a = 'Alice';
first();

function first(){
  const b = "Hello";
  second();

  function second(){
    const c = "Hi";
    third();
  }
}

function third(){
  const d = "Hey";
  console.log(d   c   b   a); // Reference Error
}

## Call Stack order:
third() EC - top
second() EC
first() EC
global EC - bottom


Scope Chain:
second() --nested inside--> first() --nested inside--> global scope.
third() is independently defined inside gloabal scope.

Reference Error occurred because both 'c' as well as 'b' cannot be accessed using the scope chain.

सारांश:
ई-सी, वार एनवी, सीएल-एसके, स्कोप, स्कोप-चेन सभी अलग-अलग लेकिन संबंधित अवधारणाएं हैं।
स्कोपिंग प्रश्न पूछता है कि वेरिएबल कहाँ रहते हैं, हम वेरिएबल्स तक कहाँ पहुँच सकते हैं और कहाँ नहीं।
जेएस में लेक्सिकल स्कोपिंग: जहां हम वेरिएबल्स तक पहुंच सकते हैं उसके नियम ठीक उसी पर आधारित हैं जहां कोड में एफएनएस और ब्लॉक लिखे गए हैं।
प्रत्येक दायरे के पास उसके सभी बाहरी दायरे से सभी चर तक पहुंच होती है। यह स्कोप चेन है जो एक तरफ़ा सड़क है। एक बाहरी दायरा कभी भी आंतरिक दायरे के चर तक नहीं पहुंच सकता।
एक निश्चित दायरे की स्कोप श्रृंखला सभी मूल स्कोपों ​​के सभी वार एनव्स को एक साथ जोड़ने के बराबर है।
स्कोप श्रृंखला का उस क्रम से कोई लेना-देना नहीं है जिसमें एफएनएस को बुलाया जाता है। यह स्कोप श्रृंखला को बिल्कुल भी प्रभावित नहीं करता है।
जब कोई वेरिएबल वर्तमान स्कोप में नहीं मिलता है, तो इंजन स्कोप श्रृंखला को तब तक देखता है जब तक कि उसे वह वेरिएबल नहीं मिल जाता जिसे वह ढूंढ रहा है। इसे वेरिएबल लुक-अप कहा जाता है।

विज्ञप्ति वक्तव्य यह आलेख यहां पुन: प्रस्तुत किया गया है: https://dev.to/mahf001/execution-context-call-stack-29kp?1 यदि कोई उल्लंघन है, तो कृपया इसे हटाने के लिए [email protected] से संपर्क करें।
नवीनतम ट्यूटोरियल अधिक>

चीनी भाषा का अध्ययन करें

अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।

Copyright© 2022 湘ICP备2022001581号-3