나는 자바 스크립트 인터프리터가 작동하는 방법에 대해 조금 의심하고있다. 특히 내가 여기에서 언급하는 경우를 위해. 이 디버거의 범위 섹션 쇼를 칠 때JavaScript는 범위에서 변수를 어떻게 해석합니까?
var a = 5;
function foo(){
debugger
a = 100;
if(false){
var a = 10;
}
a = 1000;
}
foo();
console.log(a);
단순히 복사 브라우저의 콘솔에서 위의 코드를 붙여 예상되는 대답은, 그것은 반환 무엇 1000 내가 의도적으로 디버거를 뒀다 5.
입니다 변수 은 정의되지 않은 범위입니다. 따라서 추가 할당은 로컬 변수 a에 대해 수행됩니다. 로컬 변수 a는 거짓 블록에 있으므로 전혀 작성되지 않았습니다.
변수의 범위가 {}에 국한되지는 않지만 함수에 국한된다는 것을 알고 있습니다. 그러나이 경우는 놀라운 일입니다!
누구든지 설명 할 수 있습니까?
고마워요! 호이스트 (hoists)라는 용어는 변수 이름, 함수 및 값을 할당하는 동안 표시되는 순서에 대한 js 해석에 대한 좋은 설명이있는 다른 기사로 안내합니다. 기사 링크 : http://www.adequatelygood.com/JavaScript-Scoping-and-Hoisting.html –