2014-04-29 2 views
-1
function foo(){ 
    var bar = 0; 
    $("#dummy").click(function(){ 
      bar += 1; 
    }) 
} 

막대가 함수 foo 안에 있다고 생각했기 때문에 항상 호출 가능합니다. 그러나 오류 메시지는 변수 막대가 정의되지 않았 음을 의미합니다. 왜 그 이유를 설명 할 수 있습니까?이 변수가 JavaScript 범위를 벗어나는 이유는 무엇입니까?

+2

은,하지만 당신은 미래의 어떤 정의되지 않은 시점에서 실행됩니다 온 클릭 핸들러를 정의하고 있습니다. 그 내부 'bar + = 1' 함수가 호출 될 때, 더 이상 "under"foo()가되지 않을 것입니다. 어딘가에서 우주에서 떠 다니는 작은 기능이 될 것입니다. 'var bar; function foo() {....}'가 작동하게합니다. –

+4

입력하신 스 니펫은 설명 된 오류를 생성해서는 안됩니다. 스 니펫이 일반화 된 경우 실제 코드 중 일부를 제공 할 수 있습니까? 또는 오류를 보여주는 [JSFiddle] (http://jsfiddle.net/) 또는 [JSBin] (http://jsbin.com)을 만드시겠습니까? –

+0

click 함수는 변수'bar'를 보유하지 않는 콜백 함수입니다. 내가 잘못되었을 수 있습니다 .. –

답변

0

범위를 벗어나지 않았습니다. 함수 내에서 클릭 핸들러를 정의하고 있으므로 아무 일도 일어나지 않도록 함수를 호출해야하지만, 게시 된 코드는 그 오류를 가져 오는 이유를 알 수 없습니다.

여기 예입니다 (필자는 jQuery를 제거) :

<button>Add one</button> 
<div>bar is: <span id="barCount">0<div></div> 

function foo(){ 
    var bar = 0; 
    document.querySelector("button").onclick = function(){ 
    bar += 1; 
    document.querySelector("#barCount").innerHTML = bar; 
    }; 
} 

foo(); 

Fiddle

관련 문제