ความแตกต่างของขอบเขตตัวแปรในโครงสร้าง if-else ใน JavaScript
ขอบเขตของตัวแปรมีข้อแตกต่างบางประการ
ลองพิจารณามันจากตัวอย่าง
ลองประกาศตัวแปร res ด้วยค่าหนึ่งนอกเงื่อนไขของเรา
และภายในเงื่อนไขเปลี่ยนค่านั้นเป็นค่าอื่น:
let res = 1;
if (true) {
res = 2;
}
console.log(res); // จะแสดง 2
อย่างที่คุณเห็น ตัวแปร res เปลี่ยนค่า
ภายในเงื่อนไข อย่างไรก็ตาม ทุกอย่างจะเปลี่ยนไป
หากภายในเงื่อนไขมีการประกาศตัวแปร
res ผ่าน let ด้วย:
let res = 1;
if (true) {
let res = 2; // ประกาศตัวแปรผ่าน let
}
console.log(res); // จะแสดง 1 ไม่ใช่ 2!
ประเด็นทั้งหมดที่นี่คือการประกาศตัวแปร
ผ่าน let ภายในเงื่อนไขได้สร้างตัวแปรเฉพาะที่
res ขึ้นมา
นั่นคือภายในเงื่อนไขมีตัวแปรหนึ่งชื่อ
res และนอกเงื่อนไขมีอีกตัวหนึ่ง
สามารถตรวจสอบสิ่งนี้ได้โดยการแสดงค่าของตัวแปร
ในคอนโซลภายในเงื่อนไข:
let res = 1;
if (true) {
let res = 2;
console.log(res); // จะแสดง 2
}
console.log(res); // จะแสดง 1
ผู้เขียนโค้ดด้านล่างต้องการทำ
การตรวจสอบอายุว่าถึง 18
ปีหรือยัง อย่างไรก็ตาม โค้ดไม่ว่าอายุจะเป็นค่าใด
ก็แสดงค่า undefined ในคอนโซล
กรุณาแก้ไขข้อผิดพลาดของผู้เขียนโค้ด นี่คือโค้ดที่มีปัญหา:
let age = 17;
let adult;
if (age >= 18) {
let adult = true;
} else {
let adult = false;
}
console.log(adult);
ผู้เขียนโค้ดด้านล่างต้องการทำ
การตรวจสอบอายุว่าถึง 18
ปีหรือยัง หลังการตรวจสอบโค้ดพบว่าหาก
อายุเท่ากับหรือมากกว่า 18 ปี
ในตัวแปร adult จะถูกบันทึกเป็น true
ซึ่งควรจะเป็นเช่นนั้น อย่างไรก็ตาม หากอายุน้อยกว่า
18 ตัวแปร adult จะมี
ค่าเป็น undefined กรุณาแก้ไขข้อผิดพลาด
ของผู้เขียนโค้ด
นี่คือโค้ดที่มีปัญหา:
let age = 17;
let adult;
if (age >= 18) {
adult = true;
} else {
let adult = false;
}
console.log(adult);
ผู้เขียนโค้ดด้านล่างต้องการทำ
การตรวจสอบอายุ โค้ด อย่างไรก็ตาม ไม่ว่าอายุจะเป็นค่าใด
ก็แสดงค่า undefined ในคอนโซล กรุณาแก้ไขข้อผิดพลาดของผู้เขียนโค้ด
นี่คือโค้ดที่มีปัญหา:
let 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);
ผู้เขียนโค้ดด้านล่างต้องการทำ
การตรวจสอบอายุ โค้ด อย่างไรก็ตาม เมื่ออายุ
มากกว่า 18 ปี จะแสดง
ค่า undefined ในคอนโซล กรุณาแก้ไขข้อผิดพลาดของผู้เขียนโค้ด
นี่คือโค้ดที่มีปัญหา:
let age = 19;
let res;
if (age >= 18) {
let res;
if (age <= 23) {
res = '18 ถึง 23';
} else {
res = 'มากกว่า 23';
}
} else {
res = 'น้อยกว่า 18';
}
console.log(res);