2014-10-12 2 views
0

주변을 읽었으며 지금은 매우 혼란 스럽습니다. 전역 범위의 로컬 변수에 액세스하려고합니다. 함수 내부에서 var를 제거했지만 여전히 "정의되지 않은"것으로 돌아오고 있습니다. 나는 뭔가를 놓친 것 같아요. 어떤 도움도 크게 감사 할 것입니다. 감사!함수 외부의 변수에 액세스 할 수 없습니다. jquery

var totalcostApple; 

function shopping() { 

    $("#apple").on("keyup", function() { 

    var quantity = $("#apple").val(); 

    totalcostApple = (quantity * 0.2).toFixed(2); 


    }); 

}; 

shopping(); 

console.log(totalcostApple); 
+3

. 기대치를 좀 더 자세하게 설명해주세요. – charlietfl

+0

내가하고 싶은 것은 keyup 이벤트 이후 쇼핑 기능 외부의 totalcostApple 변수에 액세스 할 수 있습니다. 이것이 가능한가? – user3858292

+1

예. 그러나 사건이 발생하기 전에 * 변수에 액세스하고 있습니다. 이벤트를'console.log (totalcostApple);'*를 실행하면 예상대로 작동 할 것이다. –

답변

0

당신이하는 일을 오해하고있는 것처럼 보입니다. 코드의 흐름이 엉망입니다. shopping()으로 전화를 걸면 브라우저가 keyup 이벤트를 apple 객체에 연결하도록 지시합니다. 그러나 객체에 연결 한 직후에 변수를 쿼리합니다. 그러나 shopping 함수와 keyup 이벤트 사이에서 keyup 이벤트를 생성 할만큼 빠르지 않습니다. 그냥 한 번 콘솔에 기록하는 대신 다른 시간에 콘솔에 기록해보십시오. 언제든지. 다음 코드 줄을 추가 : 변수가 실제로 변경 때

$(window).on('click', function(){ console.log(totalcostApple); });

지금 당신이 을 테스트 할 수 있습니다. 클릭 할 때마다 totalcostApple의 현재 값이 콘솔에 기록됩니다.

그러나 실제로, 당신은 같은 코드를 개선해야 당신이 KeyUp 이벤트에서 평가되기 전에 변수를 로그인을 시도하는

// add some code to assure that everything you do only gets executed after the DOM is ready 
$(document).ready(function(){ 
    // add a default value to your totalcost. 
    var totalcostApple = 0; 

    function shopping() { 
     // remove your keyup event from here and tie it in directly. 
     var quantity = $("#apple").val(); 
     totalcostApple = (quantity * 0.2).toFixed(2); 
     // move your log inside the event so you can see it when it *changes* 
     console.log(totalcostApple); 
    }; 

    $("#apple").on("keyup", shopping); 
}); 
관련 문제