2016-07-10 6 views
0

私はscript1script2です。ここにscript1からいくつかのコードは次のとおりです。JavaScriptはコールバック関数と実行を理解しています

script2で今
var pos; 

function foo(param){pos = param;} 

bar(foo); 

function bar(callback){ 
    //prints 'function' 
    console.log(typeof callback); 

    navigator.geolocation.getCurrentPosition(
     success, 
     fail 
    ); 
} 

function success(position, callback){ 
    //prints 'undefined' 
    console.log(typeof callback); 
    var pos= { 
     lat: position.coords.latitude, 
     long: position.coords.longitude 
    }; 
    callback(pos); 
} 

にはどうすれば正しくbarへのコールバック関数としてfooを渡し、navigator.geolocation.getCurrentPositionにそれを連鎖していますか? posを正しくscript1に戻すにはどうすればよいですか?代わりに値を返すのはなぜですか?

+1

に再渡すコールバックする必要がありますか? –

+0

https://developer.mozilla.org/en-US/docs/Web/API/Geolocation/getCurrentPosition –

+0

'navigator.geolocation.getCurrentPosition'の非同期動作が原因で、あなたが何をしているのかを約束しておくことをお勧めします。ここでは、今日のこのユースケースのために提出した回答です: http://stackoverflow.com/questions/38287407/cant-return-get-access-to-a-variable-inside-a-function/38287844#38287844 – jmealy

答えて

3

あなたは成功関数 `SUCCESS`が呼び出されている方法

function bar(callback){ 
    //prints 'function' 
    console.log(typeof callback); 

    navigator.geolocation.getCurrentPosition(
     function(pos){ 
      // repass callback to success method 
      success(pos, callback); 
     }, 
     fail 
    ); 
} 
+0

これは動作しますが、Javaのバックグラウンドの誰かとして、私は関数がJavaScriptのオブジェクトであることを知っていますが、理解しません。 –

+0

getCurrentPostion(成功、失敗)は2つの関数ポインタを渡して非同期を呼び出し、それが呼び出されるスコープについて - Javaにも同じことが適用されます。 Javaのようにプライベートスコープです – Steve

0
var pos; 

function foo(param){pos=param; console.log(param);} 

bar(foo); 

function bar(callback){ 
    //prints 'function' 
    //console.log(callback); 

    navigator.geolocation.getCurrentPosition(
     success.bind(null, callback), 
     fail 
    ); 

} 

function success(callback, position){ 
    //prints 'function' 

    var pos= { 
     lat: position.coords.latitude, 
     long: position.coords.longitude 
    }; 

    callback(pos); 
} 

function fail(){ 
    console.log('failed'); 
} 
関連する問題