자바 스크립트 호스팅을 한 문장으로 설명하는 것은 변수이며 함수는 선언 된 범위의 맨 위로 올라갑니다.
나는 당신이 초보자라고 가정하고, 처음에 올바르게 호이 스팅을 이해하기 위해 정의되지 않은 것과 ReferenceError 의 차이점을 이해했습니다.
var v;
console.log(v);
console.log(abc);
이제 벨로우즈 코드에서 무엇을 볼 수 있습니까? 변수 및 함수 표현식이 해제됩니다.
<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));
처음 두 로그의 출력되어 정의되지 않은 및 형식 오류 : 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;
}
이제 동일한 논리가 기능 범위 내에서 선언 된 변수, 함수 경험 및 함수 선언에 대해서도 적용됩니다. 요점 : 파일 상단에 올리지 않습니다 .
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 및하자 여전히 글로벌 범위와 VAR이처럼 기능 범위,하지만 const를 모두 인식하고 변수도 범위를 차단라는 또 다른 범위를 인식 할 수 있습니다. for 루프, if else 문, while 루프 등과 같은 코드 블록이있을 때마다 블록 범위가 존재합니다.
const를 사용하고이 블록 범위에서 변수를 선언하기 위해 let을 사용하면 변수 선언은 해당 블록의 맨 위에 만 올릴 것이며 부모 함수 또는 맨 위에 올리지 않을 것입니다. 게양되는 글로벌 범위.
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;
}