Nuansa Skop Pembolehubah dalam Konstruksi if-else di JavaScript

Skop pembolehubah mempunyai satu nuansa. Mari kita lihatnya melalui contoh. Mari isytihar di luar kondisi kita pembolehubah res dengan satu nilai, dan di dalam kondisi tukar nilai tersebut kepada nilai lain:

javascriptlet res = 1;

if (true) {
  res = 2;
}

console.log(res); // akan memaparkan 2

Seperti yang anda lihat, pembolehubah res bertukar di dalam kondisi. Walau bagaimanapun, semuanya akan berubah, jika di dalam kondisi juga kita isytihar pembolehubah res melalui let:

javascriptlet res = 1;

if (true) {
  let res = 2; // isytihar pembolehubah melalui let
}

console.log(res); // akan memaparkan 1, bukan 2!

Di sini semuanya disebabkan oleh fakta bahawa pengisytiharan pembolehubah melalui let di dalam kondisi mencipta pembolehubah tempatan res.

Iaitu, di dalam kondisi wujud satu pembolehubah res, dan di luar kondisi - satu lagi. Anda boleh memastikannya dengan memaparkan nilai pembolehubah di dalam konsol di dalam kondisi:

javascriptlet res = 1;

if (true) {
  let res = 2;
  console.log(res); // akan memaparkan 2
}

console.log(res); // akan memaparkan 1
Задание 1

Pengarang kod di bawah ingin melaksanakan periksa umur untuk mencapai 18 tahun. Walau bagaimanapun, kod untuk sebarang nilai umur memaparkan dalam konsol nilai undefined. Betulkan ralat pengarang kod. Ini kod bermasalah:

javascriptlet age = 17;
let adult;

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

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

Pengarang kod di bawah ingin melaksanakan periksa umur untuk mencapai 18 tahun. Selepas memeriksa kod, ternyata jika umur sama dengan atau lebih daripada 18 tahun, maka ke dalam pembolehubah adult direkodkan true, seperti sepatutnya, walau bagaimanapun, jika umur kurang daripada 18, maka pembolehubah adult mempunyai nilai undefined. Betulkan ralat pengarang kod.

Ini kod bermasalah:

javascriptlet age = 17;
let adult;

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

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

Pengarang kod di bawah ingin melaksanakan periksa umur. Walau bagaimanapun, kod untuk sebarang nilai umur memaparkan dalam konsol nilai undefined. Betulkan ralat pengarang kod.

Ini kod bermasalah:

javascriptlet age = 17;
let res;

if (age >= 18) {
  if (age <= 23) {
    let res = 'dari 18 hingga 23';
  } else {
    let res = 'lebih daripada 23';
  }
} else {
  let res = 'kurang daripada 18';
}

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

Pengarang kod di bawah ingin melaksanakan periksa umur. Walau bagaimanapun, kod untuk nilai umur lebih besar daripada 18 tahun memaparkan dalam konsol nilai undefined. Betulkan ralat pengarang kod.

Ini kod bermasalah:

javascriptlet age = 19;
let res;

if (age >= 18) {
  let res;
  
  if (age <= 23) {
    res = 'dari 18 hingga 23';
  } else {
    res = 'lebih daripada 23';
  }
} else {
  res = 'kurang daripada 18';
}

console.log(res);