2009-09-07 5 views
2

이 문제를 설명하기 내 코드의 단순화 된 부분 버전 :기능은 값 문제 "기억"

function testFunc(){ 
    var randomNum = Math.floor(Math.random() * 100); 

    if(!flag){ 
     addEvents(); 
     flag = true; 
    }; 

    function checkNumber(){ 
     alert(randomNum) 
    } 

    function addEvents(){ 
     $("#someElement").click(function(e){ checkNumber() }); 
    } 
} 

내가이 요소에 대해 한 번만 클릭 이벤트를 바인딩 만에서 변경 변수 외부에서 사용하려면이 다른 곳. 문제는, 이것은 초기 값으로 randomNum을 항상 알려주는 것입니다. bind가 처음 발생할 때 이있었습니다!

클릭이 트리거 될 때마다 변수를 읽지 않는 이유는 무엇입니까?

+0

randomNum 그것이 작동하도록 글로벌되어야한다고 생각 : ( – vsync

+0

나는 checkNumber()가 randomNum 변수를 액세스 할 수없는 것 같습니다, 왜냐하면 그 Gloabl이 아니기 때문에 ... – vsync

답변

0

값을 전역 변수로 설정합니다. 그런 다음 버튼 클릭시 값을 경고합니다. 값이 한 번만 설정되었으며 버튼을 누를 때마다 값이 변경되지 않습니다.

+0

아니요 다시 언급했듯이 코드 전체에 걸쳐 다시 설정됩니다. – vsync

+0

문제는 그가 나중에 스크립트에서 randomNum의 값을 변경하지만 이벤트가 트리거되기 전에 발생하며 이벤트가 발생할 때이 변경이 나타나지 않는다고 생각합니다. 하지만 어쩌면 나는 그의 질문을 오해 할 수도있다. 나의 영어는 완벽하지 않다 :-) – p4bl0

+0

이벤트가 시작되기 전에 바뀌어야한다고 생각한다. :) – vsync

4

정말 글로벌입니까? alerting window.randomNum 시도해보십시오

+0

그렇다. 나는 그저 글로벌화하지 않았다. 나는 그런 바보 야. – vsync

+0

@vsync - 죄송 합니다만, 제가 다른 질문에 모두 답한 것처럼 보입니다. 그것은 몇 분 만에 4 개의 upvote를 얻었습니다. – karim79

0

이것은 기능을 수행하는 기능과 관련이있을 수 있습니다. 당신이 할 때 : 내가 생각

function checkNumber() { 
    alert(randomNumber); 
} 

는 일을하는 것과 같습니다

myFunc = function checkNumber() { 
    alert(randomNumber); 
} 

을 그리고 final했다 randomNumber 것처럼 따라서 설정됩니다. 당신이 난수를 사용해야하는 경우 해당 범위 outide 이동하고 글로벌, 또는 더 나은 만들기, 매개 변수로 기능을 통해 그것을 통과해야 다음 중 하나를

function checkNumber(myNumber) { 
    alert(myNumber); 
} 
+0

나는 그것을 전달하는 줄 알았지 만 checkNumber 함수는 Click 이벤트에서만 호출되었으며 그 문제는 같은 문제가 있기 때문에 한 번만 바인딩됩니다. 나는 "checkNumber"가 "testFunc"안에 있기 때문에 변수를 사용할 수도 있기 때문에 생각했습니다. 나는 Global var로 옮겼지만 그 못생긴 해결책은 다음과 같다 : / – vsync

0

왜 사용자 정의 속성을 난수를 붙이지 마십시오 당신이 clickevent를 추가하는 요소의?

function testFunc(){ 
    var randomNum = Math.floor(Math.random() * 100); 
    $("#someElement").attr("randomNum", randomNum); 

    if(!flag){ 
     addEvents(); 
     flag = true; 
    }; 

    function checkNumber(){ 
     alert($("#someElement").attr("randomNum")) 
    } 

    function addEvents(){ 
     $("#someElement").click(function(e){ checkNumber() }); 
    } 
} 

그런 식으로 항상 요소와 함께 유지되지만 그 곳에서 불러올 수 있습니다. 꽤 지저분하지만 작동해야합니다.