scope คือ ขอบเขต
การสร้าง scope คือการสร้างขอบเขต
ขอบเขตทำให้ code นอก scope ไม่เห็นตัวแปรใน scope
function foo () {scope foo ทำให้ code ข้างนอกไม่รู้จัก x
var x = 'hi';
}
x; // error : x is not defined
นั่นคือ x เป็น local variable ของ foo
💥 for-loop, while-loop, if, else ไม่ได้สร้าง scope
if (true) {ถึงจะประกาศ x ใน if แต่ code ข้างนอกก็ยังเห็น x
var x = 'hi';
}
x; // hi
📢 เพื่อป้องกันความสับสน ควรประกาศตัวแปรทั้งหมดที่บรทัดแรกของ function
JavaScript มี global scope หรือเรียกว่า window scope
การประกาศตัวแปรลอยๆ นอก function เป็นการสร้างตัวแปรให้ global scope
var x = 'hi';📢 ไม่ควรประกาศตัวแปรนอก function
x; // hi
window.x; // hi
this.x; // hi
y = 'bye'; // ไม่มี var ให้ผลเหมือนกัน
y; // bye
window.y; // bye
this.y; // bye
เพราะมันจะเป็น global variable และอาจไปซ้ำกับโค้ดอื่นที่อยู่ในเพจ
ถ้าจำเป็นต้องสร้าง global variable แนะนำให้ใช้ namespace คู่กับ IIFE
namespace ควรเป็นชื่อบริษัท ทีม หรือโปรเจ็กที่กำลังทำอยู่
(function (ns) {ดูวิธีอื่นๆ ได้ ที่นี่
ns.theme = "dark";
})(window.wonderProject = window.wonderProject || {});
window.wonderProject.theme; // dark
📢 ไม่ควรสร้างตัวแปรใน function โดยไม่ใช้ var
เพราะเมื่อ function ทำงาน จะเป็นการสร้างตัวแปรที่ global scope
function foo() {z สร้างครั้งแรกใน function
z = 'Oh';
}
foo();
z; // Oh
window.z; // Oh
this.z; // Oh
แต่เพราะไม่ใช้ var ทำให้มันเป็นตัวแปรของ global (window) ไป
อันตรายเพราะอาจเกิด bug ได้
สรุป
- สร้าง scope ทำโดยใช้ function เท่านั้น
- for, while, if, else ไม่สร้าง scope
- ประกาศตัวแปรทั้งหมดตั้งแต่บรรทัดแรกของ function
- ใช้ namespace คู่กับ IIFE ถ้าต้องการสร้างตัวแปรที่ global scope (window scope)
บทความน่าสนใจ
เทคนิค JavaScript 1 : "use strict" ทำไม และ อย่างไร ?
Soft Skills 1 : Agile ก็เท่านั้น ถ้าไม่มีใครฟังเราพูด !
No comments:
Post a Comment