JavaScriptda funksiyalarda o'zgaruvchilarning bir xil nomlari

Faraz qilaylik, funksiyadan tashqarida ham, ichkarida ham num o'zgaruvchisi mavjud. Bu holda, lokal num o'zgaruvchisi bilan har qanday o'zgartirishlar global num o'zgaruvchisiga hech qanday ta'sir ko'rsatmaydi:

javascriptlet num = 1; // global o'zgaruvchi

function func() {
  let num = 2; // lokal o'zgaruvchi
  console.log(num);
}
func(); // funksiyani chaqiramiz, 2 chiqadi

console.log(num); // 1 chiqadi - global o'zgaruvchi o'zgarmadi

Lekin, agar biz lokal num o'zgaruvchisini let orqali e'lon qilishni unutsak, unda funksiya ichida hech qanday lokal num o'zgaruvchisi yaratilmaydi, balki shunchaki global o'zgaruvchi o'zgartiriladi:

javascriptlet num = 1;

function func() {
  num = 2; // let yozishni unutdik - tashqi o'zgaruvchini o'zgartirmoqdamiz
  console.log(num);
}
func(); // funksiyani chaqiramiz, 2 chiqadi

console.log(num); // 2 chiqadi - o'zgaruvchi o'zgardi

Bu erda ikkita holat bo'lishi mumkin: yoki biz haqiqatan ham global o'zgaruvchini o'zgartirmoqchi edik (unda hammasi yaxshi), yoki biz let ni unutib qo'ydik va tasodifan global o'zgaruvchini o'zgartirdik.

Ikkinchi holat skriptning oldindan aytib bo'lmaydigan xatti-harakatlariga olib keladigan, aniqlash qiyin bo'lgan xatodir. Shuning uchun har doim, yangi o'zgaruvchi kiritayotganda, uni let orqali e'lon qiling.

Задание 1

Kodni ishlamasdan, konsolda nima chiqishini aniqlang:

javascriptlet num = 1;

function func() {
  num = 2;
}
func();

console.log(num);
Задание 2

Kodni ishlamasdan, konsolda nima chiqishini aniqlang:

javascriptlet num = 1;

function func() {
  let num = 2;
}
func();

console.log(num);