2017-12-03 3 views
1

내가 자바 스크립트 함수는 함수 핸들을 반환하는 방법을 이해하려고 노력하고 왜 다음 코드 인쇄 '2'대신 '1''기능으로 복귀'와 자바 스크립트 함수

var num = 01; 
 
function processAndIncrement() { 
 
    var process = function() { 
 
    console.log(num); 
 
    } 
 
    num++; 
 
    return process; 
 
} 
 
var proCall = processAndIncrement(); 
 
proCall();

+1

예, 함수 핸들을 반환합니다. 호출 될 때,'num'의 현재 값을 출력합니다. 무엇에 대해 특별히 이해하지 못합니까? 왜 '1'을 기록 할 것이라고 기대 했습니까? – Bergi

+0

'processAndIncrement'에 대한 호출은'num' (전역 변수)를 증가시키고'num' (이제'2')를 기록하는 다른 함수를 리턴합니다. –

답변

0

작동 방법 num 변수는 코드의 함수와 독립적입니다. 두 함수 모두 동일한 변수를 참조하므로 둘 다 동일한 데이터를 변경하고 변경 사항을 관찰합니다.

따라서 num++ 작업은 proCall이 호출되기 전에 num을 증가시킵니다. proCall이 마지막으로 호출되면 증가 된 상태이므로 num의 증가 된 상태를 봅니다.


다음은 작업 순서에 대한 단계별 설명입니다 (호이 스팅 무시). 일련 번호를 따르십시오.

// 1. create the variable 
var num = 01; 

// 2. create the processAndIncrement function 
function processAndIncrement() { 

    // 4. Assign a function that logs `num` to the `process` variable 
    var process = function() { 

    // 8. log the current value of `num` (which was incremented at step 5) 
    console.log(num); 
    } 

    // 5. increment `num` 
    num++; 

    // 6. return the `process` function 
    return process; 
} 

// 3. Invoke processAndIncrement, and assign its return value to `proCall` 
var proCall = processAndIncrement(); 

// 7. invoke `proCall` (which is the same as the `process` function) 
proCall(); 

당신이 proCall가 호출 될 때 발생하는 증분을 원하는 경우, num++process 기능 내부로 이동해야합니다.

1

num 값이 이미 1 (01 == 1)이므로이 코드는 2을 인쇄합니다.