: ทบทวนเรื่องการประกาศและขอบเขตการใช้งานตัวแปร
>> ตัวแปรในภาษาจาวาสคริปต์ใดๆสามารถเก็บข้อมูลชนิดใดก็ได้ (untyped)
>> การประกาศตัวแปรด้วยคีย์ var ซ้ำกันสามารถทำได้ ให้ผลเป็นตัวแปรเดียวกัน เช่น
var x = 10;
var x = 20;
document.write( x ); ได้ผลลัพธ์เท่ากับ 20
>> การเรียกใช้ตัวแปรที่ไม่ได้กำหนดค่าให้ จะให้ผลเป็น undefined เสมอ
>> การเรียกใช้ตัวแปรที่ไม่ได้ประกาศไว้ จะให้ผลเป็น undeclared error
>> ตัวแปรในภาษาจาวาสคริปต์แยกได้ สอง ขอบเขต คือ global กับ local
>> ขอบเขต global คือการประกาศตัวแปรนอกฟังก์ชัน ส่วนขอบเขต local คือการประกาศตัวแปรในฟังก์ชัน
>> ตัวแปรที่อยู่ในขอบเขต global สามารถเรียก ณ ที่ใดในสคริปต์ก็ได้ (ในหน้า html นั้น) ต่างจากตัวแปรที่อยู่ในขอบเขต local สามารถเรียกได้ภายในฟังก์ชันเท่านั้น
>> สามารถประกาศตัวแปร global ชื่อเดียวกับ local ได้ และหากเรียกใช้ตัวแปรดังกล่าวภายในฟังก์ชัน จะถือว่าเรียกใช้ตัวแปร local นะจ๊ะ ตัวอย่างเช่น
var x = 10;
function area() {
var x = 20;
document.write( x );
}
area(); ผลลัพธ์คือ 20
document.write( x ); ผลลัพธ์คือ 10
>> หากละคีย์ var สำหรับการประกาศตัวแปร local ด้วยตัวอย่างข้างต้น จะถือเป็นการกำหนดค่าให้ตัวแปร global หรือก็คือการกำหนดค่าใหม่ให้กับตัวแปรที่ถูกประกาศแล้วผ่านฟังก์ชันเท่านั้นเอง
var x = 10;
function area() {
x = 20;
document.write( x );
}
area(); ผลลัพธ์คือ 20
document.write( x ); ผลลัพธ์คือ 20
>> ตัวแปรในภาษาจาวาสคริปต์ไม่มีระบบ block-level ตัวอย่างต่อไปนี้สามารถแสดงค่าของ y ได้แม้ว่าจะประกาศมันภายใน scope ของ if-else
function typeOfNumber( x ) {
if ( x >= 0 ) { var y = "positive integer"; }
else { var y = "negative integer"; }
document.write( y );
}
typeOfNumber( 10 ); ผลลัพธ์คือ "positive integer"
>> ในฟังก์ชันใดๆของจาวาสคริปต์ ตัวแปร local ที่ถูกประกาศจะเก็บไว้ในหน่วยความจำชั่วคราว เมื่อลำดับการประกาศตัวแปรนั้นไม่ถูกต้อง ค่าที่ได้จึงเป็น undefined ไม่ใช่ undeclared error แม้กระทั่งมีตัวแปร global ถูกประกาศไว้ก่อน แล้วเรียกชื่อของตัวแปร global นั้นภายในฟังก์ชัน ค่าที่ได้ก็ยังคงเป็น undefined ด้วยเหตุผลเดียวกัน ตัวอย่างเช่น
var x = 10;
function test() {
document.write( x );
var x = 30;
}
test(); ผลลัพธ์คือ undefined
>> เราสามารถแก้ไขผลลัพธ์ของตัวอย่างข้างต้นให้ถูกต้องด้วยการลบบรรทัด
var x = 30; ทิ้งไป เท่านี้มันก็จะไปใช้ค่าของตัวแปร global แทน
>> โอกาสหน้าพบกับเรื่อง Functions ก่อนจะโถมเข้าเรื่องคลาสกับออบเจ็กต์แบบจัดหนักเต็มลูกสูบฉบับผู้เริ่มต้นเช่นเคยครับ
ไม่มีความคิดเห็น:
แสดงความคิดเห็น