Dəyişənlərin görünmə sahəsinin if-else quruluşlarında incəlikləri JavaScript-də

Dəyişənlərin görünmə sahəsinin bəzi incəlikləri var. Gəlin bunu bir nümunə ilə nəzərdən keçirək. Gəlin şərtimizin xaricində bir dəyişən elan edək res bir dəyərlə, və daxildə isə bu dəyəri digəri ilə dəyişək:

javascriptlet res = 1;

if (true) {
  res = 2;
}

console.log(res); // 2 çap edəcək

Gördüyünüz kimi, res dəyişəni şərtin daxilində dəyişdi. Lakin, hər şey dəyişəcək, əgər şərtin daxilində dəyişən res let ilə elan edilərsə:

javascriptlet res = 1;

if (true) {
  let res = 2; // dəyişəni let ilə elan edək
}

console.log(res); // 2 yox, 1 çap edəcək!

Burada bütün iş ondadır ki, şərtin daxilində let ilə dəyişənin elan edilməsi lokal res dəyişəni yaradır.

Yəni şərtin daxilində bir res dəyişəni var, şərtin xaricində isə - başqa bir dəyişən. Buna əmin olmaq üçün dəyişənin dəyərini şərtin daxilində konsola çıxarda bilərik:

javascriptlet res = 1;

if (true) {
  let res = 2;
  console.log(res); // 2 çap edəcək
}

console.log(res); // 1 çap edəcək
Задание 1

Aşağıdakı kodun müəllifi 18 yaşa çatıb-çatmadığını yoxlamaq istəyirdi. Lakin, kod istənilən yaş dəyərində konsola undefined dəyərini çap edir. Kod müəllifinin səhvini düzəldin. Problemli kod budur:

javascriptlet age = 17;
let adult;

if (age >= 18) {
  let adult = true;
} else {
  let adult = false;
}

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

Aşağıdakı kodun müəllifi 18 yaşa çatıb-çatmadığını yoxlamaq istəyirdi. Kodun yoxlanılmasından sonra məlum oldu ki, əgər yaş 18 və ya daha böyükdürsə, onda adult dəyişəninə true yazılır, olduğu kimi, lakin, əgər yaş 18-dən kiçikdirsə, onda adult dəyişəni undefined dəyərinə malikdir. Kod müəllifinin səhvini düzəldin.

Problemli kod budur:

javascriptlet age = 17;
let adult;

if (age >= 18) {
  adult = true;
} else {
  let adult = false;
}

console.log(adult);
Задание 3

Aşağıdakı kodun müəllifi yaş yoxlaması yerinə yetirmək istəyirdi. Lakin, kod istənilən yaş dəyərində konsola undefined dəyərini çap edir. Kod müəllifinin səhvini düzəldin.

Problemli kod budur:

javascriptlet age = 17;
let res;

if (age >= 18) {
  if (age <= 23) {
    let res = '18-dən 23-ə qədər';
  } else {
    let res = '23-dən böyük';
  }
} else {
  let res = '18-dən kiçik';
}

console.log(res);
Задание 4

Aşağıdakı kodun müəllifi yaş yoxlaması yerinə yetirmək istəyirdi. Lakin, kod yaş 18-dən böyük olduqda konsola undefined dəyərini çap edir. Kod müəllifinin səhvini düzəldin.

Problemli kod budur:

javascriptlet age = 19;
let res;

if (age >= 18) {
  let res;
  
  if (age <= 23) {
    res = '18-dən 23-ə qədər';
  } else {
    res = '23-dən böyük';
  }
} else {
  res = '18-dən kiçik';
}

console.log(res);