<?xml version="1.0" encoding="utf-8" ?><rss version="2.0" xmlns:tt="http://teletype.in/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:media="http://search.yahoo.com/mrss/"><channel><title>Yokub</title><generator>teletype.in</generator><description><![CDATA[Yokub]]></description><image><url>https://img1.teletype.in/files/c6/fd/c6fda650-2d0b-4fbd-a9b9-82579c594599.png</url><title>Yokub</title><link>https://teletype.in/@yokubdev</link></image><link>https://teletype.in/@yokubdev?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=yokubdev</link><atom:link rel="self" type="application/rss+xml" href="https://teletype.in/rss/yokubdev?offset=0"></atom:link><atom:link rel="next" type="application/rss+xml" href="https://teletype.in/rss/yokubdev?offset=10"></atom:link><atom:link rel="search" type="application/opensearchdescription+xml" title="Teletype" href="https://teletype.in/opensearch.xml"></atom:link><pubDate>Sat, 30 May 2026 16:23:50 GMT</pubDate><lastBuildDate>Sat, 30 May 2026 16:23:50 GMT</lastBuildDate><item><guid isPermaLink="true">https://teletype.in/@yokubdev/yGL426pWh88</guid><link>https://teletype.in/@yokubdev/yGL426pWh88?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=yokubdev</link><comments>https://teletype.in/@yokubdev/yGL426pWh88?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=yokubdev#comments</comments><dc:creator>yokubdev</dc:creator><title>JavaScript’da Lexical Environment (Scoping) va Closure</title><pubDate>Sun, 13 Jul 2025 13:18:17 GMT</pubDate><category>javascript</category><description><![CDATA[<img src="https://img2.teletype.in/files/12/d5/12d5ff47-cb0e-4f73-8022-ec408ace2b9b.jpeg"></img>JavaScript — kuchli, ammo ba’zan murakkab til. Ayniqsa, closure va lexical scope kabi tushunchalar ko‘pchilikni chalkashtirib yuboradi. Ushbu maqolada siz bu tushunchalarni nafaqat nazariy, balki amaliy misollar orqali ham chuqur tushunib olasiz.]]></description><content:encoded><![CDATA[
  <p id="tKdb">JavaScript — kuchli, ammo ba’zan murakkab til. Ayniqsa, <code>closure</code> va <code>lexical scope</code> kabi tushunchalar ko‘pchilikni chalkashtirib yuboradi. Ushbu maqolada siz bu tushunchalarni nafaqat nazariy, balki amaliy misollar orqali ham chuqur tushunib olasiz.</p>
  <p id="sGwT">Bu maqolada siz quyidagilarni o&#x27;rganasiz :</p>
  <ul id="heft">
    <li id="cXdq">Lexical Environment nima?</li>
    <li id="mPI9">Scope turlari (Global, Function, Block)</li>
    <li id="6VzE">Closure nima va qanday ishlaydi?</li>
    <li id="fGbe">5 ta amaliy misollar bilan mustahkamlash.</li>
  </ul>
  <p id="uzFw"></p>
  <h3 id="oUgr">1. Lexical Environment nima?</h3>
  <p id="bdI3">Har bir JavaScript funksiyasi ishlayotganida o‘zining <strong>lexical environment</strong>iga ega bo‘ladi. Bu environment 2 ta asosiy qismdan iborat:</p>
  <ul id="xFCS">
    <li id="VQxr"><strong>Environment Record</strong> – o‘zgaruvchilar va funksiyalar haqida ma’lumot saqlanadigan qism.</li>
    <li id="yZsa"><strong>Outer Lexical Environment Reference</strong> – tashqi (ya’ni yuqoridagi) scope’ga bog‘lanadi.</li>
  </ul>
  <p id="prmQ">JavaScript’da bu struktura <strong>chain-like scope resolution</strong> ni tashkil qiladi.</p>
  <p id="zSvb"></p>
  <h3 id="xVMM">2. Scoping turlari</h3>
  <p id="bFJk"><strong>Scope </strong>- o’zgaruvchi va funksiyalar qayerda ko’rinish/ko’rinmasligini aniqlab beruvchi tushuncha.</p>
  <p id="7dwf"><strong>Global</strong>  - Har joyda mavjud  <br /><strong>Function</strong> - Faqat funksiyada ko‘rinadi   <br /><strong>Block</strong>  - <code>{}</code> ichida (<code>let</code>, <code>const</code> o&#x27;zgaruvchilar bunga misol)</p>
  <p id="uFGl">Misol 1: Global va Function scope</p>
  <pre id="BJlt" data-lang="javascript">var globalVar = &quot;I&#x27;m global&quot;;

function example() {
  let localVar = &quot;I&#x27;m local&quot;;
  console.log(globalVar); // &quot;I&#x27;m global&quot;
  console.log(localVar);  // &quot;I&#x27;m local&quot;
}

example();
// console.log(localVar); // ReferenceError: localVar is not defined</pre>
  <blockquote id="ZOIY">Bu yerda <code>localVar</code> faqat <code>example</code> funksiyasi ichida mavjud. Tashqarida unga murojaat qilib bo‘lmaydi</blockquote>
  <p id="c6mK">Misol 2: Block scope ( <code>var</code>, <code>let</code>, <code>const</code>)</p>
  <pre id="5Rz9" data-lang="javascript">function blockScopeExample() {
  if (true) {
    let a = 42;
    const b = 100;
    var c = 123
    console.log(a, b); // 42 100
  }
  // console.log(a); // ReferenceError
  // console.log(b); // ReferenceError
  // console.log(c); // 123

}

blockScopeExample();</pre>
  <blockquote id="kmfn"><code>let </code>va <code>const </code>{} <strong>block-scoped</strong> bo&#x27;lganligi uchun u yaratilgan blokdan tashqarida murojat qilib bo&#x27;lmaydi. <code>var</code> esa <strong>function-scoped</strong> bo‘lib, <code>{}</code> blok scope dan tashqaridagi function ning <strong>lexical environment</strong>ida yaratiladi va function ichida murojat qilish mumkin.</blockquote>
  <p id="TWXW"></p>
  <h3 id="L7g7">3. Closure nima?</h3>
  <p id="cgM3"><strong>Closure</strong> – bu funksiya o‘zining tashqi lexical environmentiga murojaat qilishi mumkin bo‘lgan holatdir, hatto bu tashqi funksiyaga ishlab tugagan bo‘lsa ham.</p>
  <blockquote id="g8HM">Oddiy qilib aytganda: “Ichki funksiya tashqi funksiyadagi o‘zgaruvchilarni eslab qoladi.”</blockquote>
  <p id="vW20"></p>
  <p id="qwuX">Misol 3: Oddiy closure</p>
  <pre id="mwaa" data-lang="javascript">function outer() {
  let count = 0;
  return function inner() {
    count++;
    console.log(&quot;Count:&quot;, count);
  };
}

const counter = outer();
counter(); // Count: 1
counter(); // Count: 2</pre>
  <blockquote id="F4u5"><code>inner</code> funksiyasi <code>outer</code> tugagan bo‘lsa ham, <code>count</code> o‘zgaruvchisini eslab qolgan.</blockquote>
  <p id="5aIN"></p>
  <p id="Liwx">Misol 4: Closure bilan private o‘zgaruvchilar yaratish</p>
  <pre id="Xkpx" data-lang="javascript">function createUser(name) {
  let secret = &quot;My password is 123&quot;;

  return {
    getName: () =&gt; name,
    revealSecret: () =&gt; secret
  };
}

const user = createUser(&quot;Aziz&quot;);
console.log(user.getName());       // Aziz
console.log(user.revealSecret()); // My password is 123</pre>
  <blockquote id="wDDd">Bu usul orqali JavaScript’da <strong>encapsulation</strong> (yashirish) amalga oshiriladi va bu orqali private variable lar yaratish mumkin.</blockquote>
  <p id="wIyW"></p>
  <p id="Slvb">Misol 5: Loop va Closure muammosi va yechimi (Interview larda ko&#x27;p so&#x27;raladigan savollardan biri)</p>
  <pre id="VntA" data-lang="javascript">// noto‘g‘ri
for (var i = 0; i &lt; 3; i++) {
  setTimeout(() =&gt; console.log(&quot;Wrong:&quot;, i), 100);
}
natija: 3,3,3

// Yechimi: &#x60;let&#x60; dan foydalanish
for (let i = 0; i &lt; 3; i++) {
  setTimeout(() =&gt; console.log(&quot;Correct:&quot;, i), 100);
}
natija: 1,2,3</pre>
  <blockquote id="viFm"><code>var</code> — <strong>function-scoped</strong> (yoki global agar funksiya ichida bo‘lmasa), shuning uchun butun <code>for</code> sikli davomida <strong>bitta <code>i</code> o‘zgaruvchisi</strong> mavjud bo‘ladi.<br /> <code>setTimeout</code> orqali kechiktirilgan funksiya esa, loop tugagach (<code>i = 3</code> bo‘lganida) ishga tushadi va <strong>har uchalasida ham <code>i = 3</code></strong> bo‘ladi., <code>let</code> esa har bir iteratsiyada yangi lexical environment yaratadi.</blockquote>
  <p id="6pp0"><br />Edge case&#x27;lar :</p>
  <ul id="Zgz6">
    <li id="0z1r">Closure orqali katta ma&#x27;lumotni eslab qolish (masalan, DOM) – bu browserda memory leak ga olib kelishi mumkin.</li>
    <li id="x9Hk">Keraksiz o‘zgaruvchilarni closure ichida eslab qolish – bu xavfli yoki chalkash holatga olib keladi.</li>
    <li id="uacC">Ichma-ich closure’lar chuqur bo‘lsa, debugging va profiling juda qiyinlashadi.</li>
  </ul>
  <p id="CwM2">Qachon ishlatish kerak (Use Cases):</p>
  <ul id="zZi9">
    <li id="4OWp">Closure yordamida ma&#x27;lumotni tashqi koddan yashirish mumkin (<code>module pattern</code>)</li>
    <li id="QXMS">Event handler yoki async kodlarda closure orqali state ni saqlab qolish.</li>
    <li id="aFUx">Bir nechta sozlamali funksiyalarni yaratishda (<code>partial application</code>, <code>currying</code>).</li>
  </ul>

]]></content:encoded></item></channel></rss>