2015-01-29 3 views
2

저는 자바 스크립트 세계에 처음 오릅니다. 변수 범위에 대해 읽었을 때 나는 그 아이디어가 뒤에 있다고 생각합니다. 몇 가지 실험을했는데 여기서 예상치 못한 결과가 나오는 상황이 있습니다. 여기에서 x의 값은 스크립트의이 시점에서 자바 스크립트 변수 가시성

total = 0; 
var id = setInterval(function(){ 
total++; 
}, 10); 
console.log(total); // 0 

예상 총의 값은 항상 내가 확인한 0 같이 1 스크립트의이 시점에서 내가

var x = 0; 

function set(){ 
    x++; 
} 

set(); 
console.log(x) // 1 

무슨 뜻입니다 그리고 나는 총 가치가 증가한다고 확신합니다. 두 번째 예제의 문제점과 전역 변수 total의 값이 변경되지 않는 이유는 무엇입니까?

당신은 후 간격 를 생성하여 setInterval을 사용하는
+0

[내 변수가 함수 내부에서 수정 된 후에도 변수가 변경되지 않는 이유는 무엇입니까? - 비동기 코드 참조] (http://stackoverflow.com/questions/23667086/why-is-my-variable-unaltered-after-i-modify-it-inside-of-a-function-asynchron) –

답변

0

되는 여기 - 그래서 https://developer.mozilla.org/en-US/docs/Web/API/WindowTimers.setInterval

,

을 읽을

합니다 (setInterval을 함수에 인수로 전달)을 주기적으로 실행되는 기능,

total = 0; 
var id = setInterval(function(){ 
total++; 
}, 10); 
console.log(total); // 0 

console.log(total); is executed before then the function inside the `setInterval` executes(aftyer a delay of 10ms). 

시도해 볼 수 있습니다.

total = 0; 

    var id = setInterval(function(){ 
    total++; 
    console.log(total); 
    }, 10); 

이 경우 총계는 증가 된 후에 인쇄됩니다.

0

Java 스크립트가 비동기이기 때문에 합계가 인쇄됩니다. console.log가 먼저 실행되고 나서 10 밀리 초의 지연이 주어진대로 setInterval 내부의 함수가 실행됩니다 ...

'total'의 증가 된 값을 보려면 다음 코드를 실행하면됩니다 setInterval 후에.

window.setTimeout(function(){ 
    console.log(total); 
    }, 10);