2015-02-07 3 views
-1

사용자가 onclick 함수를 트리거하는 링크를 클릭 할 때마다 1을 더하는 내부 카운터를 설정하려고합니다. 0에서 시작하여 사용자가 링크를 클릭 할 때마다 카운터가 1 (또는 원하는 정수)만큼 증가합니다. 카운터는 새로 고침시 0으로 재설정해야하며 정수 값을 보유하는 변수는 전역 범위에서 선언 할 수 없습니다.JS : 글로벌 범위에서 카운터 변수를 설정하지 않고 증분 카운터?

함수가 실행될 때마다 반복적으로이 선언을하지 않고 변수를 처음 선언하는 방법에 대한 catch22를 계속 실행합니다. 기본적으로 카운터 값을 다시 원래 값으로 설정합니다. 이 같은

// method 1: use a private scope 
var click_handler = (function() { 
    var counter = 0; // this is not in global scope! 
    return function() { 
     counter++; 
    }; 
})(); 

// method 2: use a function property 
function click_handler() { 
    click_handler.counter++; 
} 
click_handler.counter = 0; 
+0

왜 변수를 전역 적으로 선언 할 수 없습니까? – MFazio23

+0

당신의 코드를 보여주는 것이 도움이 될 수도 있습니다 ... – qtgye

답변

2

나는 당신이 원하는 일을 2 가지 방법이 여기에있다 그 후 당신 무엇 확실하지 않다, 그러나? 여기서 카운터는 지역 변수이고 onclick 함수는 카운터 변수와 동일한 범위에서 정의됩니다. 또한 새로 고침 할 때마다 카운터가 0으로 재설정됩니다.

<html> 
<head> 
    <title>Link Counter</title> 
    <script type="text/javascript"> 
    window.onload = init 

    function init() { 
     var counter = 0 
     var link = document.getElementById("link") 
     var display = document.getElementById("display") 
     function increase_counter() { 
      counter++ 
      display.innerHTML = counter 
      return false 

     } 

     link.onclick = increase_counter 

    } 
    </script> 
</head> 

<body> 
    <a href="" id="link">Click Here </a> 
    <p id="display">0 </p> 
</body> 

</html> 
+0

클로저 (첫 번째 예)가 좋습니다. 의사 전역 변수로 함수에 속성을 추가하는 것은 좋은 생각이 아닙니다. – RobG

0

뭔가 :