ฉันใช้สิ่งนี้ในระหว่างการสัมภาษณ์เมื่อไม่กี่วันที่ผ่านมา ผู้สัมภาษณ์กล่าวว่าความเข้าใจของฉันค่อนข้างลำเอียง ฉันกลับไปอ่านหนังสือและบล็อกบางส่วนและทำการทดสอบบางอย่าง ฉันพบว่าความเข้าใจของฉันผิดจริง ๆ
1. ตัวแปรทั่วโลก
มันควรจะเป็นสิ่งที่ใช้กันมากที่สุด เรียกสิ่งนี้ในฟังก์ชั่นและนี่เป็นตัวแปรทั่วโลก
var value = "0"; ฟังก์ชั่น mei () {var value = "1"; console.log (this.value); // 0 console.log (ค่า); // 1} mei ();ผลลัพธ์คือ 0 เพราะชี้ไปที่ทั่วโลก
2. ตัวสร้าง
นี่คือการใช้งานที่ฉันคุ้นเคยมากขึ้น ใช้สิ่งนี้ในตัวสร้าง หลังจากวัตถุใหม่ใหม่นี้ชี้ไปที่วัตถุใหม่นี้
var value = "window"; ฟังก์ชั่น mei () {this.value = 1; this.show = function () {console.log (this.value)}} var m = new mei (); console.log (m.value); // 1 m.show (); // 1คุณจะเห็นว่าเอาต์พุตคือ 1 แทนหน้าต่าง จะเห็นได้ว่าเนื่องจากตัวสร้างสิ่งนี้ได้ชี้ไปที่วัตถุใหม่แทนที่จะเป็นตัวแปรทั่วโลก
3. โทรและสมัคร
ยืมตัวอย่างจากการโทรของฉันและสมัครบล็อกโดยตรง
var p = "456"; ฟังก์ชั่น f1 () {this.p = "123"; } ฟังก์ชั่น f2 () {console.log (this.p); } f2 (); // 456 f2.call (f1 ()); // 123 f2.apply (f1 ()); // 123ผลลัพธ์ของบรรทัดแรกนั้นเข้าใจง่าย สิ่งนี้ชี้ไปที่ทั่วโลก 123 เป็นเพราะหลังจากใช้การโทรหรือสมัครแล้วใน F2 คะแนนไปที่ F1 และ P ใน F1 คือ 123 โปรดคลิกที่โพสต์บล็อกเพื่อดูรายละเอียด
4. ฟังก์ชั่นเรียกว่าเป็นวิธีการของวัตถุ (โดยที่ฉันทำผิดพลาด)
ในเวลานั้นฉันขอให้ฉันเขียนวัตถุที่มีหลายวิธี ฉันกำหนดตัวแปรทั่วโลกในใจแล้วเรียกสิ่งนี้ในวิธีการของวัตถุ ผู้สัมภาษณ์ถามฉันว่านี่คืออะไร? ฉันบอกว่ามันควรจะเป็นหน้าต่างเพราะฉันใช้วิธีนี้น้อยมากและคิดว่ามีเพียงใหม่หรือการโทรเท่านั้นที่จะเปลี่ยนทิศทางของสิ่งนี้ดังนั้นเขาจึงบอกว่ามันผิดและขอให้ฉันกลับไปดูตัวเอง ตอนนี้ฉันได้ลองแล้วฉันคิดผิดจริงๆ โพสต์รหัส
var value = "พ่อ"; ฟังก์ชั่น mei () {} mei.value = "เด็ก"; mei.get = function () {console.log (this.value)}; mei.show = function () {console.log (ค่า)}; mei.get (); // เด็ก mei.show (); //พ่อเนื่องจาก Get ถูกเรียกว่าเป็นวิธีการของเหม่
สำหรับพ่อฉันเข้าใจด้วยวิธีนี้ ฟังก์ชั่นชี้ไปที่การแสดงนั้นถูกกำหนดไว้ในสภาพแวดล้อมทั่วโลก เนื่องจากห่วงโซ่ขอบเขตจึงไม่พบค่าในการแสดงดังนั้นฉันจึงกำหนดสภาพแวดล้อมของเขาและค้นหามัน สิ่งนี้พบคุณค่าระดับโลก หากมีข้อผิดพลาดในการทำความเข้าใจที่นี่ฉันหวังว่าเพื่อนจะชี้ให้เห็น!