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
, let
va const
keywordlari 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.
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
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. Quyidavar
varlet
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
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.