วันอังคารที่ 22 กรกฎาคม พ.ศ. 2557

ภาษา JavaScript ฉบับผู้เริ่มต้น part 13

: ทบทวนเรื่องการประกาศและขอบเขตการใช้งานตัวแปร

>> ตัวแปรในภาษาจาวาสคริปต์ใดๆสามารถเก็บข้อมูลชนิดใดก็ได้ (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 ก่อนจะโถมเข้าเรื่องคลาสกับออบเจ็กต์แบบจัดหนักเต็มลูกสูบฉบับผู้เริ่มต้นเช่นเคยครับ

ไม่มีความคิดเห็น:

แสดงความคิดเห็น