JavaScriptda O'zgaruvchilar

JavaScriptda O'zgaruvchilar

Har bir dasturlash tilida o'zgaruvchilar bor. Biz JavaScript o'zgaruvchilari haqida o'rganamiz.

O'zgaruvchi nima?

O'zgaruvchi - bu biror ma'lumotni o'zida saqlab turoladigan "quti" desak ham bo'ladi. Va ularni biz faylimizning bir nechta joylarida ishlatsak bo'ladi. Bundan kelib chiqsak, o'zgaruvchilarni biz kodni qayta-qayta yozishimizdan saqlab qoladi. Ular turlicha bo'lishi mumkin, masalan obyekt, sonlar va hokazo.

JavaScriptda o'zgaruvchilar bilan qanday ishlaymiz ?

Har qaysi tilda o'zgaruvchilar ularni izohlovchi ma'lum so'zlarga (keyinchalik -keyword ) bog'lanadi. Masalan, JavaScriptda o'zgaruvchilarni var, letva constkeywordlari yordamida e'lon qilamiz. Ular bir-biridan qamrovi (scope), o'zidagi ma'lumotni qay tarzda saqlay olishi bilan farqlanadi. Keling, endi ularni JavaScriptda ko'rib chiqamiz.

Var

JavaScriptda o'zgaruvchilar e'lon qilishning eski yo'li. ES2015 versiyasigacha yagona keyword hisoblangan. Biz var bilan yaratilgan o'zgaruvchilarni e'lon qilishimiz, xohlagan turdagi ma'lumotni biriktirishimiz va o'sha ma'lumotni xohlaganimizcha o'zgartirishimiz mumkin. var o'zgaruvchilari asosan global o'zgaruvchilar yaratish uchun ishlatiladi, va ularning qamrovi funksiya oralig'ida (function scope). Ya'ni, agar bizning funksiyamizda biror var bilan yaratilgan o'zgaruvchi bo'lsa, biz uni o'sha funksiyaning tashqarisida foydalanolmaymiz.

var city = "Qarshi";
console.log(city); // Qarshi

var city = "Toshkent";
console.log(city); // Toshkent

Yuqorida ko'rganingizdek, garchi o'zgaruvchilarimizning nomlari bir xil bo'lsa ham, biz xohlaganimizdek ularni o'zgartirishimiz mumkin. Va bu var ning xavfli tomoni hisoblanadi.

Let

let ham var kabi vazifani bajaradi, lekin ularni orasida jiddiy farqlar bor.

  1. let bilan yaratilgan o'zgaruvchilarga yangi data yoki ma'lumot biriktirsak bo'ladi lekin bu o'zgaruvchilarni qayta e'lon qilib bo'lmaydi. Masalan:

    let sport = "football";
    console.log(sport); // football
    
    // endi "sport" o'zgaruvchisiga yangi ma'lumot biriktiramiz
    sport = "karate"
    console.log(sport) // karate
    
    // endi uni qayta e'lon qilamiz
    let sport = "boxing"
    console.log(sport) // SyntaxError: Identifier 'sport' has already been declared
    
    1. Keyingi farq "ko'tarilish" (hoisting) mavzusiga bog'liq. Qisqacha qilib aytganda, let o'zgaruvchilarini biz e'lon qilmasimizdan oldin qabul qilolmaymiz. Hoisting haqida keyingi darslarda atroflicha to'xtalamiz. Quyida var var let orasidagi farqni ko'rishingiz mumkin:

      console.log(number); // undefined
      
      var number = 10;
      
      console.log(number); // 10
      
      console.log(number); //Reference Error: Cannot access 'number' before initialization
      
      let number = 10;
      // yoki const number = 10
      
      console.log(number); // 10
      
      1. Keyingi farqi bu let o'zgaruvchilarining qamrovi (scope) "block" qamroviga ega. Ya'ni, ularni har qanday { } qavslari tashqarisidan qabul qilolmaymiz. var o'zgaruvchilarining qamrovi esa "function scope" ya'ni funksiya qamroviga ega. Quyida bu farqni ko'rishingiz mumkin:

        function fn(){
          var number = 5;
        };
        
        console.log(number); // Reference Error: number is not defined
        
        // Chunki number o'zgaruvchisini funksiya tashqarisidan chaqiryapmiz 
        {
          var number2 = 15;
        }
        
        console.log(number2);  // 15 -> chunki number2 funksiya ichida emas
        
        function fn() {
          let number = 5;
        }
        
        console.log(number); // Referece Error: number is not defined
        
        {
          let number2 = 15;
        }
        
        console.log(number2); // Referece Error: number2 is not defined
        

Const

const - nomlanishi kabi "constant" ya'ni "o'zgarmas" degan tarjimani beradi. let o'zgaruvchisi bilan qamrov borasida bir xil ya'ni const qamrovi ham "block scope { }". Farqi shundaki, const o'zgaruvchilariga biz yangi ma'lumot biriktirolmaymiz.

const name = "Anna";
name = "Janna";

console.log(name); //  TypeError: Assignment to constant variable.

Darslik sizga manzur bo'ldi degan umiddaman. Agar sizga qaysi mavzularda ko'proq darslik kerak bo'lsa, kommentariyalarda yozib qoldiring.