2016-07-21 4 views
1

클로저를 이해하려고합니다.Javascript 클로저가 예상 결과를 제공하지 않음

var a = 1; 

var g = function() { 
    var a = a; 
    return function() { 
    console.log(a); 
    } 
} 

g()(); 

는 지금까지 내가 아는 한, 함수 호출 g()() 즉 1.의 값을 기록해야하지만 콘솔에 undefined를 기록한다. 내 개념이 어딘가에 약하다는 것을 알고 있지만, 몇 시간을 소비 한 후에도 파악할 수는 없습니다. 누군가 도울 수 있습니까? 이 글로벌 a와 상호 작용 아니에요 -

답변

1

자바 스크립트는 전체 기능 범위의 var 선언을 호이스트. 외부 범위 var a = 1의 변수를 덮어 씁니다.
예는이에 해당 : 초기 값을 할당하지 않고

var a = 1; 

var g = function() { 
    var a; // a is undefined 
    a = a; // a = undefined 
    return function() { 
    console.log(a); 
    } 
} 

g()(); 

a 단순히 undefined입니다. 나중에 변수를 자체에 a = a으로 지정하면 noop이고 aundefined입니다.

변수 호이 스팅에 대한 자세한 내용은 check this article입니다.

1

문제는 라인

var a = a; 

이 모두가 로컬 변수 범위 선언 자체에 할당입니다. 당신은 다른 이름의 지역 변수를 사용해야합니다 :

var a = 1; 
 

 
var g = function() { 
 
    var b = a; 
 
    return function() { 
 
    console.log(b); 
 
    } 
 
} 
 

 
g()();

+0

제임스 감사합니다. 나는 그 대답을 받아 들일 것이다. –

관련 문제