ในการอธิบายการโฮสต์ใน javascript ในประโยคเดียวคือตัวแปรและฟังก์ชันจะถูกยกขึ้นไปที่ด้านบนสุดของขอบเขตที่ประกาศไว้
ฉันสมมติว่าคุณเป็นมือใหม่ในการทำความเข้าใจการชักรอกอย่างถูกต้องในตอนแรกเราได้เข้าใจความแตกต่างระหว่างundefinedและReferenceError
var v;
console.log(v);
console.log(abc);
ตอนนี้ในรหัสร้องสิ่งที่เราเห็น? ตัวแปรและนิพจน์ฟังก์ชันคือ decleard
<script>
var totalAmo = 8;
var getSum = function(a, b){
return a+b;
}
</script>
แต่ภาพจริงพร้อมหลักฐานว่าทั้งตัวแปรและฟังก์ชั่นถูกยกขึ้นที่ด้านบนของขอบเขต:
console.log(totalAmo);
console.log(getSum(8,9));
var totalAmo = 8;
var getSum = function(a, b){
return a+b;
}
console.log(totalAmo);
console.log(getSum(9,7));
เอาต์พุตของบันทึกสองรายการแรกไม่ได้กำหนดไว้และTypeError: getSum ไม่ใช่ฟังก์ชันเนื่องจากทั้ง var totalAmoและgetSumถูกยกที่ด้านบนของขอบเขตเช่นการร้อง
<script>
var totalAmo;
var getSum;
console.log(totalAmo);
console.log(getSum(8,9));
var totalAmo = 8;
var getSum = function(a, b){
return a+b;
}
console.log(totalAmo);
console.log(getSum(9,7));
</script>
แต่สำหรับฟังก์ชั่นการประกาศฟังก์ชันทั้งหมดยกอยู่เหนือขอบเขต
console.log(getId());
function getId(){
return 739373;
}
ตอนนี้ตรรกะเดียวกันนี้ใช้สำหรับ varibale ฟังก์ชัน experessions และฟังก์ชัน declaratoins ที่ประกาศภายในขอบเขตการทำงาน จุดสำคัญที่พวกเขาจะไม่ถูกยกขึ้นด้านบนของไฟล์ ;
function functionScope(){
var totalAmo;
var getSum;
console.log(totalAmo);
console.log(getSum(8,9));
var totalAmo = 8;
var getSum = function(a, b){
return a+b;
}
}
ดังนั้นเมื่อคุณใช้คีย์เวิร์ดvarตัวแปรและฟังก์ชันยกขึ้นที่ด้านบนของขอบเขต (ขอบเขตส่วนกลางและขอบเขตฟังก์ชัน) สิ่งที่เกี่ยวกับletและconst , const และ let นั้นยังคงตระหนักถึงขอบเขตส่วนกลางและขอบเขตของฟังก์ชันเช่นเดียวกับ var แต่ตัวแปร const และ let ก็ตระหนักถึงขอบเขตอื่นที่เรียกว่าขอบเขตที่ถูกบล็อก ขอบเขตการบล็อกจะปรากฏขึ้นเมื่อใดก็ตามที่มีบล็อกของรหัสเช่นสำหรับลูปคำสั่ง if else ในขณะที่วนซ้ำเป็นต้น
เมื่อเราใช้ const และปล่อยให้ประกาศตัวแปรในขอบเขตบล็อกเหล่านี้การประกาศตัวแปรจะถูกยกขึ้นที่ด้านบนของบล็อกนั้นที่อยู่ในนั้นเท่านั้นและจะไม่ถูกยกขึ้นที่ด้านบนของฟังก์ชันหลักหรือด้านบนของ ขอบเขตทั่วโลกที่ถูกยกขึ้น
function getTotal(){
let total=0;
for(var i = 0; i<10; i++){
let valueToAdd = i;
var multiplier = 2;
total += valueToAdd*multiplier;
}
return total;
}
ตัวแปรในตัวอย่าง abobe จะถูกยกขึ้นเหมือนร้อง
function getTotal(){
let total;
var multiplier;
total = 0;
for(var i = 0; i<10; i++){
let valueToAdd;
valueToAdd = i;
multiplier = 2;
total += valueToAdd*multiplier;
}
return total;
}