0

다음과 비슷한 javascript 코드가 있지만 foo() 내에서 'myVar'를 사용하려고하면 해당 값이 정의되지 않습니다. 또한 변수를 bar()에 전달하여 직접 할당했지만 참조로 전달하지는 않습니다. 그 차이를 만드는 경우 다음과 같은 HTML함수 내의 숨겨진 변수 할당

<input type="hidden" id="coords" name="coords"/> 

실제 코드

function foo() { 
    bar(); 
    var myVar = document.getElementById('coords').value; 
    // myVar should now be (40.7143528, -74.0059731) 
    alert(myVar); // returns blank 

    var request = { 
    location: myVar, 
    radius: 500, 
    types: [type] //previously defined 
    }; 

    //Then send a search request to Google... 
} 

function bar() { 
    geocoder.geocode({'address':address}, function(results, status) { 

     document.getElementById('coords').value = results[0].geometry.location; 
     // Let's say the location is NYC (40.7143528, -74.0059731) 

    alert(document.getElementById('coords').value); //returns the correct value 
    // however, this pops up after the pop up in function foo() 

    }); 
} 

구글지도 API를 사용하고 있습니다 : 나를 위해 잘

+0

언제'foo'를 호출합니까? –

+0

또한 디버그 경고를 배치하면 bar()가 호출되기 전에 'myVar'생성이 발생하는 것처럼 보입니다. –

+0

foo()가 호출 됨 onClick (HTML의 숨겨진 변수 앞에) –

답변

1

bar 실행 비동기 때문이다. 즉 당신은 아약스이 방법을 사용할 수 없습니다

var myVar = document.getElementById('coords').value; 

document.getElementById('coords').value = results[0].geometry.location; 

실제로 실행하는 것을 의미한다. results/status에 의존하는 모든 작업은 콜백에서 수행해야합니다.

+0

고마워요. 내가 끝내기 만하면 foo() 안에 bar()를 넣는 것이 었습니다. 추가 기능으로 사용하지 않았습니다. 별도의 기능을 원했지만 필요 없을 것입니다. –

+0

@AdamMThompson 회신하여 도움이되는 답변을 수락하십시오. –

1

jsfiddle Demo

실행됩니다. 실제로 정의 앞에 function을 사용하도록 함수를 정의 할 때를 확인하십시오. geocoder는 않습니다

function foo() { 
bar(); 
var myVar = document.getElementById('coords').value; 
} 

function bar() { 
document.getElementById('coords').value = 4; 
} 

foo();