2011-12-07 4 views
1

다른 변수에 변수를 전달해야하지만 아무것도 반환하지 않습니다. 참고 :이 외부로 아무것도 반환 나던,하지만 난 함수 내부에 document.write를 할 경우 완벽하게 작동합니다 ..왜이 함수는 값을 반환하지 않습니까?

<script type="text/javascript"> 
//funtion1 
    if (navigator.geolocation){ 
     navigator.geolocation.getCurrentPosition(Location); 
     } 
    function Location(position){ 
     var latitude = position.coords.latitude; 
     var longitude = position.coords.longitude; 
    return (latitude,longitude); 
     } 


//function2 
    function initialize() { 
     document.write(latitude); 
     document.write(longitude);} 
</script> 
+0

나는 그것을 부르지 않는 것을 안다. 그러나 아직도 그것이 일한다!! 그냥 값을 출력하지 않습니다. – jony

+2

깊은 끝에서 뛰어 들어가서 언어의 가장 단순한 개념을 파악하지 않고 무언가를 시도하는 대신 기본 JavaScript 자습서를 읽는 것이 좋습니다. –

답변

2

당신은 함수에서 하나의 값을 반환 할 수 있습니다. 둘 이상의 값을 반환하려면 객체를 만들고 반환 할 값을 설정합니다. 그렇지 않으면 배열을 사용하여 둘 이상의 값을 반환하십시오.

9

몇 가지 개념을 오해하고 있습니다.

우선, return (a, b)return b으로 평가됩니다. 쉼표 연산자는 거의 필요하지 않습니다. 배열을 반환하려면 return [a, b]을 사용하십시오.

두 번째로 getCurrentPosition은 비동기입니다. 위치가 발견되면 Location이 실행됩니다. 그래서 document.write라고 부르는 순간, 위치는 아직 가져 오지 않았습니다.

마지막으로 반환 값을 전혀 사용하지 않습니다. 함수의 반환 값을 사용하려면 예를 들어를 사용합니다. var result = func(...). 그러나이 경우에는 의미가 없습니다.

나는 당신이 뭘하고 있는지 정확히 알지 못하지만 위치에 의존하는 것은 콜백 (여기서는 Location) 안에 넣어야합니다. 콜백이 호출 될 때만 poision을 사용할 수 있습니다. 이 콜백에서 반환 값은 getCurrentPosition에 사용되지 않으므로 무언가를 반환하는 것은 무의미합니다.

편집 : 코드를 보면, 당신은 보내고 같은 것을 대신 return 원하는 : 위치를 사용할 수있게되면

function Location(position) { 
    var latitude = position.coords.latitude; 
    var longitude = position.coords.longitude; 

    useValuesForSomethingElse(latitude, longitude); // call other function with position data 
} 
+0

반환에 대한 머리를 주셔서 감사합니다 (a, b) – jony

1

navigator.geolocation.getCurrentPosition 비동기 즉시 전달 된 함수를 호출을 (예를 들어, 사용자가 승인 후 사이트가 위치를 알고 있는지 묻는 메시지가 나타납니다).

Location 함수에서 코드를 계속해야하며 아무데도 사용되지 않으므로 아무 것도 반환하지 않습니다.

+0

잘 그 가치를 출력 할 수없는 것 같습니다 function1 안에 function2 넣어 강제로,하지만 그게 내가 원하는 모든. 내 코드가 훨씬 더 두껍고 무거워 질 것이다. – jony

+0

그게 바로 네가해야 할 일이다. ** 다른 함수를 호출하고 매개 변수를 전달할 수있다. – ThiefMaster

2

이에 코드를 변경 시도 :

<script type="text/javascript"> 
    if (navigator.geolocation) { 
    navigator.geolocation.getCurrentPosition(function(position) { 
     var latitude = position.coords.latitude; 
     var longitude = position.coords.longitude; 
     document.write(latitude, longitude); 
    }); 
    } 
</script> 

위치를 검색 할 때 당신이 getCurrentPosition()에 전달하는 기능이 실행 얻을 것이다. 그래야만 해당 위치에 액세스 할 수 있으며 latitudelongitude 변수를 설정하여 문서에 쓸 수 있습니다. 코드 getCurrentPosition()에서

는 즉시 그 document.write(latitude,longitude); 실행 얻을 것이다 후 방식 latitudelongitude (가) 제공됩니다 전에 인 호출됩니다. document.write()Location()으로 옮겨야합니다.

업데이트 1은 (주석 기준) : 당신이 콜백 함수 내에서 document.write()하고 싶지 않지만, 다른 함수를 호출합니다

는, 당신은 콜백 함수에서 호출해야합니다.

그것은 다음과 같이 표시됩니다

<script type="text/javascript"> 
    if (navigator.geolocation) { 
    navigator.geolocation.getCurrentPosition(function(position) { 
     var latitude = position.coords.latitude; 
     var longitude = position.coords.longitude; 
     myFunction(latitude, longitude); 
    }); 
    } 

    function myFunction(latitude, longitude) { 
    // you can do here anything you wish 
    document.write(latitude, longitude); 
    } 
</script> 

업데이트 2 (의견을 기반으로 업데이트 된 질문) :

위치를 기반으로지도를로드 처리하는 방법을하는 방법입니다 전화를하다 initialize()Location()이고, 파라미터는 latitudelongitude이다. 페이지가로드 될 때 HTML 요소로 작업하는 코드가 실행되도록하려면 Location() 내부에서 실행할 수 있습니다.

window.onload = intialize(latitude, longitude); 

완전한 코드를 this를 참조하십시오.

+0

내가 원하는 것은 함수 안에 document.write()를하지 않는 것입니다! 값을 가져 와서 다른 기능에서 사용하고 싶습니다 – jony

+0

@ jony : 답변을 업데이트했습니다. – kubetz

+0

고마워, 정확히 내가 원하는 hwat 것 같아, 아픈 테스트 바로! – jony

2

.getCurrentPosition() 함수는 비동기 적으로 실행 한 다음 완료되면 Location()을 호출합니다. 한편, getCurrentPosition()에 대한 호출 이후에 오는 것은 무엇이든 실행되지만 아무런 결과가 없습니다. 즉, Location()에서 반환하는 모든 코드는 다른 코드에서 사용되지 않습니다.

Location()에서 다른 기능을 호출해야합니다.

(또한, 일반적으로 함수가 반환에 대해 얘기, 단일 값 또는 객체/배열을 반환해야합니다. 반환 값의 쉼표로 구분 된 목록이 적용 단지 목록에서 마지막 하나를 반환합니다.)

관련 문제