2017-11-10 19 views
-1

사례 1 : 다음 코드는 경고 예상대로 :전역 변수는 Javascript의 함수 범위보다 우선 적용됩니까?

var globalId='10'; 
function check(){ 
    alert(globalId); 
} 
check(); 

사례 2 : 그러나 다음 코드 경고 정의되지 않은 : 를 들어

var globalId='10'; 
function check(){ 
    alert(globalId); 
    var globalId; 
} 
check(); 

사례 2솔루션은 다음과 같습니다

var globalId='10'; 
function check(){ 
    var globalId; /**moved to top of the function due to hoisting and has an initial value of undefined. Hence, alert(globalId) return undefined. **/ 

alert(globalId); //undefined 
var globalId; 
} 
check(); 

내 질문은 지금, 어떻게 1 globalId10의 값을 갖는 경우에합니까?

+0

로컬이 없으면 전역에 도달 할 때까지 외부를 찾기 시작합니다. – dandavis

+0

첫 번째 경우 –

+0

에서 범위 수준 변수를 선언하지 않으므로 함수 내에서 접두사'var'를 사용하여 case 2에서 var private를 만들기 때문에 ... – pirs

답변

1

JavaScript에서는 현재 기능 범위에서 선언 된 변수가 항상 외부 범위에서 선언 된 변수보다 우선합니다. 두 번째 예에서

,

var globalId='10'; 
function check(){ 
    alert(globalId); 
    var globalId; 
} 
check(); 

인터프리터는 자동으로 결과를 당신을 위해 상단에 var globalId 선언을 이동합니다

var globalId='10'; 
function check(){ 
    var globalId; 
    alert(globalId); 
} 
check(); 

하고 undefined을 보여주는 것 그 이유는.

+0

저는 통역관이 아무 것도 움직이지 않는다고 생각합니다.실행 컨텍스트를 만들 때 함수와 변수 선언이 먼저 처리 된 다음 코드가 실행되므로 코드 실행 전에 선언 된 변수와 함수가 왜 존재합니다. 나는 코드가 움직인다는 것을 유추하기 때문에 "hoisting"이라는 용어를 싫어합니다. – RobG

+0

@RobG "이동"이라는 용어는 이해하기 쉽기 때문에 사용됩니다. 라인이 물리적으로 움직이지 않는다는 것은 절대적으로 옳습니다 (결국 RobG입니다).) 그러나 모든 변수 선언은 그 상황에서 다른 어떤 것보다 먼저 수행됩니다. –

0

내 질문은 이제 어떻게 케이스 1의 globalId 값이 10입니까?

는 자바 스크립트

  • 때문에 변수 함수이다 (하자 또는 CONST로 선언 된 경우) (VAR로 선언 된 경우) 또는 블록 스콥.
  • var, let 또는 const을 사용하여 변수의 범위를 현지화하지 않았습니다.

따라서 check이 정의 된 범위를 사용합니다.