JavaScript Academy · पाठ

क्लोज़र स्थिति को कैसे कैप्चर करते हैं

क्लोज़र के लेक्सिकल वातावरण को समझिए।

पाठ 1, कुल 4 में से13 चरण

क्लोज़र स्थिति को कैसे कैप्चर करते हैं, CoddyKit पर JavaScript Academy का एक निःशुल्क पाठ है। यह 4 में से 1वाँ पाठ है। इस अध्ययन पथ के 3 तक कोई भी पाठ पूरा पढ़ना निःशुल्क है — इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ व्यावहारिक अभ्यास भी उपलब्ध कराता है। यह JavaScript Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। JavaScript Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

क्लोज़र क्या होता है

क्लोज़र वह फ़ंक्शन है जो उस दायरे के चरों के संदर्भों के साथ बँधा होता है जहाँ उसे परिभाषित किया गया था। अंदर का फ़ंक्शन उन चरों को “याद” रखता है, भले ही बाहरी फ़ंक्शन लौट चुका हो।

function outer() {
  const message = "hello";
  function inner() {
    console.log(message); // sees outer variable
  }
  inner();
}
outer(); // "hello"

अंदर का फ़ंक्शन लौटाना

वास्तविक प्रभाव तब दिखाई देता है जब आप अंदर का फ़ंक्शन लौटाते हैं। बाहरी फ़ंक्शन का काम पूरा हो जाने के बाद भी उसे बाहरी चर तक पहुँच बनी रहती है।

function outer() {
  const message = "remembered";
  return function () {
    console.log(message);
  };
}
const fn = outer();
fn(); // "remembered"

लेक्सिकल दायरा

क्लोज़र लेक्सिकल स्कोपिंग के कारण काम करते हैं: कोई फ़ंक्शन उन दायरों में परिभाषित चरों तक पहुँच सकता है जो स्रोत कोड में उसे वास्तविक रूप से घेरते हैं, न कि उन दायरों तक जहाँ से उसे बुलाया जाता है।

const x = 10;
function show() {
  console.log(x); // resolves where defined
}
function run() {
  const x = 99;
  show(); // still logs 10, not 99
}
run();

संदर्भ के माध्यम से कैप्चर करना

क्लोज़र मान का स्नैपशॉट नहीं, बल्कि चर को ही कैप्चर करता है। यदि बाद में चर बदलता है, तो क्लोज़र को नया मान दिखाई देता है।

function make() {
  let count = 0;
  const get = () => count;
  count = 5; // changed after get defined
  return get;
}
console.log(make()()); // 5

हर कॉल नया दायरा बनाती है

बाहरी फ़ंक्शन का हर आह्वान चरों का नया समूह बनाता है। अलग-अलग कॉल से बने क्लोज़र अपनी स्थिति साझा नहीं करते।

function counter() {
  let n = 0;
  return () => ++n;
}
const a = counter();
const b = counter();
console.log(a(), a()); // 1 2
console.log(b());      // 1 (independent)

पैरामीटर पर क्लोज़र

फ़ंक्शन पैरामीटर भी अपने साथ रखे जाते हैं। इससे आप किसी सामान्य फ़ंक्शन से विशेष फ़ंक्शन बना सकते हैं।

function adder(x) {
  return (y) => x + y;
}
const add5 = adder(5);
console.log(add5(3));  // 8
console.log(add5(10)); // 15

लूप का जाना-पहचाना जाल

एक प्रसिद्ध बग: लूप में var का उपयोग करने पर सभी क्लोज़र एक ही चर साझा करते हैं। जब वे चलते हैं, तब तक लूप समाप्त हो चुका होता है और वे सभी अंतिम मान देखते हैं।

const fns = [];
for (var i = 0; i < 3; i++) {
  fns.push(() => i);
}
console.log(fns[0](), fns[1](), fns[2]()); // 3 3 3

let से सुधार

let हर पुनरावृत्ति के लिए नई बाइंडिंग बनाता है, इसलिए हर क्लोज़र अपने i को अलग से अपने साथ रखता है। यही आधुनिक सुधार है।

const fns = [];
for (let i = 0; i < 3; i++) {
  fns.push(() => i);
}
console.log(fns[0](), fns[1](), fns[2]()); // 0 1 2

क्लोज़र मेमोरी को जीवित रखते हैं

जब तक कोई क्लोज़र मौजूद रहता है, तब तक उसके द्वारा अपने साथ रखे गए चर कचरा-संग्रहण द्वारा हटाए नहीं जा सकते। आम तौर पर यह ठीक रहता है, लेकिन आवश्यकता से अधिक समय तक क्लोज़र रखने पर मेमोरी रिसाव हो सकता है।

function make() {
  const big = new Array(3).fill("data");
  return () => big.length;
}
const f = make();
console.log(f()); // 3 - big stays in memory via f

क्लोज़र हर जगह हैं

कॉलबैक, इवेंट हैंडलर, setTimeout, ऐरे विधियाँ और प्रॉमिस—सभी संदर्भ याद रखने के लिए क्लोज़र पर निर्भर करते हैं। आप इनका लगातार उपयोग करते हैं, अक्सर बिना ध्यान दिए।

function greet(name) {
  return () => console.log("Hi " + name);
}
[greet("Ada"), greet("Bob")].forEach((fn) => fn());
// Hi Ada
// Hi Bob

सहेजी गई स्थिति का निरीक्षण

एक ही कॉल से बने कई क्लोज़र उन्हीं सहेजे गए चरों को साझा करते हैं, इसलिए एक क्लोज़र वह पढ़ सकता है जो दूसरा लिखता है।

function pair() {
  let value = 0;
  return {
    set: (v) => { value = v; },
    get: () => value
  };
}
const p = pair();
p.set(42);
console.log(p.get()); // 42

त्वरित जाँच

क्लोज़र स्थिति को कैसे अपने साथ रखते हैं।

पुनरावृत्ति

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

शुरुआत निःशुल्क

एआई शिक्षक के साथ JavaScript सीखें — निःशुल्क

अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।

पाठ्यक्रम
59
पाठ
200

अक्सर पूछे जाने वाले प्रश्न

क्या “क्लोज़र स्थिति को कैसे कैप्चर करते हैं” पाठ निःशुल्क है?

हाँ — JavaScript Academy अध्ययन पथ के 3 तक कोई भी पाठ, जिसमें “क्लोज़र स्थिति को कैसे कैप्चर करते हैं” भी शामिल है, यहाँ वेब पर पूरा पढ़ना निःशुल्क है। इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ इंटरैक्टिव अभ्यास भी उपलब्ध कराता है। JavaScript Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

“क्लोज़र स्थिति को कैसे कैप्चर करते हैं” में मैं क्या सीखूँगा?

क्लोज़र के लेक्सिकल वातावरण को समझिए। आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ JavaScript Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।

क्या JavaScript Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?

पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर JavaScript Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 1वाँ पाठ है।

“क्लोज़र स्थिति को कैसे कैप्चर करते हैं” पाठ पूरा करने में कितना समय लगता है?

CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।

क्या मैं इस JavaScript Academy पाठ में कोड लिख और चला सकता हूँ?

हाँ। हर JavaScript Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।

इस पाठ्यक्रम के सभी पाठ

  1. क्लोज़र स्थिति को कैसे कैप्चर करते हैं
  2. क्लोज़र से निजी वेरिएबल
  3. मॉड्यूल पैटर्न (IIFE)
  4. फ़ैक्टरी फ़ंक्शन
← JavaScript Academy पर वापस जाएँ