Hoisting เป็นพฤติกรรมปกติของ JavaScript ในการเคลื่อนย้ายการประกาศไปด้านบน
ประกาศ JavaScript ยก
ใน JavaScript ตัวแปรสามารถประกาศหลังจากที่มันได้ถูกนำมาใช้
ในคำอื่น ๆ ; ตัวแปรที่สามารถนำมาใช้ก่อนที่จะได้รับการประกาศ
ตัวอย่างที่ 1 ให้ผลเช่นเดียวกับตัวอย่างที่ 2:
ตัวอย่างที่ 1
x = 5; // Assign 5 to x
elem = document.getElementById("demo"); // Find an element
elem.innerHTML = x;
// Display x in the element
var x; // Declare x
ลองตัวเอง» ตัวอย่างที่ 2
var x; // Declare x
x = 5; // Assign 5 to x
elem = document.getElementById("demo"); // Find an element
elem.innerHTML = x;
// Display x in the element
ลองตัวเอง» เพื่อทำความเข้าใจนี้คุณต้องเข้าใจคำว่า "hoisting"
Hoisting เป็นพฤติกรรมปกติของ JavaScript ในการเคลื่อนย้ายการประกาศทั้งหมดไปด้านบนของขอบเขตปัจจุบัน (ด้านบนของสคริปต์ปัจจุบันหรือฟังก์ชั่นในปัจจุบัน)
initializations JavaScript จะไม่ยก
JavaScript เพียงเครื่องชักรอกประกาศไม่ initializations
ตัวอย่างที่ 1 ไม่ได้ให้ผลเช่นเดียวกับตัวอย่างที่ 2:
ตัวอย่างที่ 1
var x = 5; // Initialize x
var y = 7; // Initialize y
elem = document.getElementById("demo"); // Find an element
elem.innerHTML = x + " " + y; // Display x and y
ลองตัวเอง» ตัวอย่างที่ 2
var x = 5; // Initialize x
elem = document.getElementById("demo"); // Find an element
elem.innerHTML = x + " " + y; // Display x and y
var y = 7; // Initialize y
ลองตัวเอง» มันทำให้รู้สึกว่า Y จะไม่ได้กำหนดในตัวอย่างสุดท้าย?
เพราะนี่คือการประกาศเท่านั้น (var Y) ไม่เริ่มต้น (= 7) ถูกยกขึ้นไปด้านบน
เพราะการ hoisting , y ได้รับการประกาศก่อนที่มันจะถูกนำมาใช้ แต่เป็นเพราะ initializations ไม่ได้ยกค่าของ Y จะไม่ได้กำหนด
ตัวอย่างที่ 2 เป็นเช่นเดียวกับการเขียน:
ตัวอย่าง
var x = 5; // Initialize x
var y; // Declare y
elem = document.getElementById("demo"); // Find an element
elem.innerHTML = x + " " + y; // Display x and y
y = 7; // Assign 7 to y
ลองตัวเอง» ประกาศตัวแปรของคุณที่ด้านบน!
Hoisting คือ (เพื่อนักพัฒนาจำนวนมาก) พฤติกรรมที่ไม่รู้จักหรือมองข้ามของ JavaScript
หากนักพัฒนาไม่เข้าใจ hoisting โปรแกรมอาจมีข้อบกพร่อง (ข้อผิดพลาด)
เพื่อหลีกเลี่ยงข้อผิดพลาดเสมอประกาศตัวแปรทั้งหมดที่จุดเริ่มต้นของทุกขอบเขต
ตั้งแต่นี้เป็นวิธี JavaScript ตีความรหัสก็มักจะเป็นกฎที่ดี
JavaScript ในโหมดที่เข้มงวดไม่อนุญาตให้มีตัวแปรที่จะใช้ถ้าพวกเขาจะไม่ได้ประกาศ
การศึกษา "use strict" ในบทต่อไป