คุณเพิ่งสะดุดกับ "คุณสมบัติ" ของ js ที่เรียกว่าการยก
var myname = "global"; // global variable
function func() {
alert(myname); // "undefined"
var myname = "local";
alert(myname); // "local"
}
func();
ในโค้ดนี้เมื่อคุณกำหนด func
คอมไพเลอร์จะดูที่เนื้อหาของฟังก์ชัน เห็นว่าคุณกำลังประกาศตัวแปรชื่อ myname
การประกาศตัวแปรและฟังก์ชัน Javascript Hoists โดยการย้ายการประกาศไปที่ด้านบนของฟังก์ชัน
เนื่องจากการยกโค้ดของคุณจึงถูกเขียนใหม่ดังต่อไปนี้
var myname = "global"; // global variable
function func() {
var myname; //declare local variable and assign it undefined
alert(myname); // "undefined"
myname = "local"; // assign local var myname to "local"
alert(myname); // "local"
}
func();
"ครอบคลุม" ตัวแปรโกลบอลนี้ หากคุณต้องการเข้าถึงตัวแปรร่วมภายในขอบเขตของฟังก์ชัน ให้ใช้คีย์เวิร์ด this
var myname = "global"; // global variable
function func() {
var myname = "local";
alert(this.myname); // "global"
alert(myname); // "local"
}
func();
โปรดทราบว่าวิธีนี้ใช้ได้เฉพาะในการเรียกใช้ฟังก์ชัน ไม่ใช่เมธอดหรือตัวสร้าง เนื่องจากคีย์เวิร์ด this
จะเปลี่ยนสิ่งที่ผูกไว้ตามวิธีที่คุณเรียกใช้ฟังก์ชัน
แก้ไข: เพื่อความสมบูรณ์
หากคุณต้องการเข้าถึงตัวแปรส่วนกลางในบริบทใดๆ โดยไม่คำนึงถึงประเภทของฟังก์ชัน ให้ประกาศตัวแปรส่วนกลางที่คุณไม่เคยครอบคลุมตามแบบแผน
var global = this; // in global scope.
var myname = "global";
var obj = {f: function () {
var myname = "local";
console.log(global.myname);
}};
obj.f(); // "global"
โปรดทราบว่านี่อยู่ในตำแหน่งเมธอดและคีย์เวิร์ด this
อ้างถึง obj โดยตรง ดังนั้นจึงไม่ได้กำหนด myname
person
t3dodson
schedule
26.05.2015