JS Hoisting
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
JavaScript भाषा में, एक तंत्र जिसे Hoisting कहा जाता है, का वर्णन किया गया है जहाँ चर, कार्य, कक्षाओं, या आयातों की घोषणाएँ उनके कोड के निष्पादन से पहले उनके दायरे के शीर्ष पर अवधारणात्मक रूप से उठाई जाती हैं। यह प्रक्रिया स्वचालित रूप से JavaScript इंजन द्वारा की जाती है, जो स्क्रिप्ट को कई पास में पार्स करता है।
पहले पास के दौरान, इंजन कोड को पार्स करता है ताकि वाक्य रचना की त्रुटियों की जांच की जा सके और इसे एक अमूर्त वाक्य रचना वृक्ष में परिवर्तित करता है। इस चरण में होइस्टिंग शामिल है, एक प्रक्रिया जहाँ कुछ घोषणाएँ निष्पादन संदर्भ के शीर्ष पर ले जाई जाती हैं। यदि पार्सिंग चरण सफल होता है, जो वाक्य रचना की त्रुटियों के बिना संकेत करता है, तो स्क्रिप्ट का निष्पादन आगे बढ़ता है।
यह समझना महत्वपूर्ण है कि:
स्क्रिप्ट को निष्पादन के लिए वाक्य रचना की त्रुटियों से मुक्त होना चाहिए। वाक्य रचना के नियमों का सख्ती से पालन किया जाना चाहिए।
स्क्रिप्ट के भीतर कोड का स्थान होइस्टिंग के कारण निष्पादन को प्रभावित करता है, हालाँकि निष्पादित कोड इसकी पाठ्य प्रतिनिधित्व से भिन्न हो सकता है।
MDN से मिली जानकारी के आधार पर, JavaScript में चार विशिष्ट प्रकार की होइस्टिंग हैं:
Value Hoisting: एक चर के मूल्य का उपयोग उसके घोषणा पंक्ति से पहले उसके दायरे में सक्षम बनाता है।
Declaration Hoisting: एक चर को उसके घोषणा से पहले उसके दायरे में संदर्भित करने की अनुमति देता है बिना ReferenceError
उत्पन्न किए, लेकिन चर का मूल्य undefined
होगा।
यह प्रकार अपने दायरे के भीतर व्यवहार को बदलता है क्योंकि चर की घोषणा उसके वास्तविक घोषणा पंक्ति से पहले होती है।
घोषणा के दुष्प्रभाव उसके साथ शामिल अन्य कोड के मूल्यांकन से पहले होते हैं।
विस्तार से, कार्य घोषणाएँ प्रकार 1 होइस्टिंग व्यवहार प्रदर्शित करती हैं। var
कीवर्ड प्रकार 2 व्यवहार को प्रदर्शित करता है। लेक्सिकल घोषणाएँ, जो let
, const
, और class
शामिल हैं, प्रकार 3 व्यवहार दिखाती हैं। अंत में, import
कथन अद्वितीय होते हैं क्योंकि वे प्रकार 1 और प्रकार 4 दोनों व्यवहार के साथ होइस्ट होते हैं।
इसलिए यदि आपके पास ऐसे परिदृश्य हैं जहाँ आप एक अनघोषित वस्तु के बाद JS कोड इंजेक्ट कर सकते हैं, तो आप इसे घोषित करके वाक्य रचना को ठीक कर सकते हैं (ताकि आपका कोड निष्पादित हो सके बजाय इसके कि एक त्रुटि फेंके):
सीखें और AWS हैकिंग का अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE) सीखें और GCP हैकिंग का अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE)