ความแตกต่างของขอบเขตตัวแปรในโครงสร้าง if-else ใน JavaScript

ขอบเขตของตัวแปรมีข้อแตกต่างบางประการ ลองพิจารณามันจากตัวอย่าง ลองประกาศตัวแปร res ด้วยค่าหนึ่งนอกเงื่อนไขของเรา และภายในเงื่อนไขเปลี่ยนค่านั้นเป็นค่าอื่น:

javascriptlet res = 1;

if (true) {
  res = 2;
}

console.log(res); // จะแสดง 2

อย่างที่คุณเห็น ตัวแปร res เปลี่ยนค่า ภายในเงื่อนไข อย่างไรก็ตาม ทุกอย่างจะเปลี่ยนไป หากภายในเงื่อนไขมีการประกาศตัวแปร res ผ่าน let ด้วย:

javascriptlet res = 1;

if (true) {
  let res = 2; // ประกาศตัวแปรผ่าน let
}

console.log(res); // จะแสดง 1 ไม่ใช่ 2!

ประเด็นทั้งหมดที่นี่คือการประกาศตัวแปร ผ่าน let ภายในเงื่อนไขได้สร้างตัวแปรเฉพาะที่ res ขึ้นมา

นั่นคือภายในเงื่อนไขมีตัวแปรหนึ่งชื่อ res และนอกเงื่อนไขมีอีกตัวหนึ่ง สามารถตรวจสอบสิ่งนี้ได้โดยการแสดงค่าของตัวแปร ในคอนโซลภายในเงื่อนไข:

javascriptlet res = 1;

if (true) {
  let res = 2;
  console.log(res); // จะแสดง 2
}

console.log(res); // จะแสดง 1
Задание 1

ผู้เขียนโค้ดด้านล่างต้องการทำ การตรวจสอบอายุว่าถึง 18 ปีหรือยัง อย่างไรก็ตาม โค้ดไม่ว่าอายุจะเป็นค่าใด ก็แสดงค่า undefined ในคอนโซล กรุณาแก้ไขข้อผิดพลาดของผู้เขียนโค้ด นี่คือโค้ดที่มีปัญหา:

javascriptlet age = 17;
let adult;

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

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

ผู้เขียนโค้ดด้านล่างต้องการทำ การตรวจสอบอายุว่าถึง 18 ปีหรือยัง หลังการตรวจสอบโค้ดพบว่าหาก อายุเท่ากับหรือมากกว่า 18 ปี ในตัวแปร adult จะถูกบันทึกเป็น true ซึ่งควรจะเป็นเช่นนั้น อย่างไรก็ตาม หากอายุน้อยกว่า 18 ตัวแปร adult จะมี ค่าเป็น undefined กรุณาแก้ไขข้อผิดพลาด ของผู้เขียนโค้ด

นี่คือโค้ดที่มีปัญหา:

javascriptlet age = 17;
let adult;

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

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

ผู้เขียนโค้ดด้านล่างต้องการทำ การตรวจสอบอายุ โค้ด อย่างไรก็ตาม ไม่ว่าอายุจะเป็นค่าใด ก็แสดงค่า undefined ในคอนโซล กรุณาแก้ไขข้อผิดพลาดของผู้เขียนโค้ด

นี่คือโค้ดที่มีปัญหา:

javascriptlet age = 17;
let res;

if (age >= 18) {
  if (age <= 23) {
    let res = '18 ถึง 23';
  } else {
    let res = 'มากกว่า 23';
  }
} else {
  let res = 'น้อยกว่า 18';
}

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

ผู้เขียนโค้ดด้านล่างต้องการทำ การตรวจสอบอายุ โค้ด อย่างไรก็ตาม เมื่ออายุ มากกว่า 18 ปี จะแสดง ค่า undefined ในคอนโซล กรุณาแก้ไขข้อผิดพลาดของผู้เขียนโค้ด

นี่คือโค้ดที่มีปัญหา:

javascriptlet age = 19;
let res;

if (age >= 18) {
  let res;
  
  if (age <= 23) {
    res = '18 ถึง 23';
  } else {
    res = 'มากกว่า 23';
  }
} else {
  res = 'น้อยกว่า 18';
}

console.log(res);