2015-01-05 48 views
1

今天我看到了navigator.geolocation.getCurrentPosition(function(obj){console.log(obj)})的代碼。在此代碼中,如果您在該方法中傳遞函數,getCurrentPosition方法將返回geoposition對象作爲參數。我想知道它是如何工作的。如果我有一個返回字符串的方法,並且希望它像getCurrentPosition那樣返回,那我該如何實現。例如如何在函數中返回值作爲參數

var me={ 
fn:function(){  
return "getObj";  
}  
} 

me.fn(function(obj){console.log(obj)}) should be print //"getObj" 
+0

要傳遞的功能 - 你可以把它作爲一個參數? –

回答

3

你需要傳遞一個回調函數

var me = { 
    fn: function(callback) 
    { 
     callback("getObj"); 
    } 
}; 

me.fn(function(obj) { console.log(obj); }); 
+0

是JavaScript中的回調預定義函數嗎? – Carlos

+0

@amit,不,您可以將它命名爲「foo」或任何您想要的,它只是參數名稱。儘管建議使用'if(typeof callback ==='function')'來檢查它是否實際上是一個函數。 – haim770

1

在這段代碼getCurrentPosition方法的返回geoposition對象作爲參數,如果你在一個方法傳遞函數。

它不是返回作爲參數的信息。它調用你給它的信息作爲參數的函數(我們在JavaScript中使用單詞「參數」,而不是參數)。函數是JavaScript中的第一類對象,您可以將引用傳遞給函數並在函數中使用它們。

所以,如果你有一個foo功能,並希望它來調用回調,其結果是:

function foo(callback) { 
    // ...come up with the result, then: 
    callback(result); 
} 

這是特別有用的,這將是A)反覆調用回調函數(如Array#sort一樣),或B)異步回調(與geolocation一樣)。

例子:

function giveMeARandom(min, max, callback) { 
 
    callback(min + Math.floor(Math.random() * (max - min))); 
 
} 
 
giveMeARandom(1, 10, function(value) { 
 
    snippet.log("Value is " + value); 
 
});
<!-- Script provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 --> 
 
<script src="http://tjcrowder.github.io/simple-snippets-console/snippet.js"></script>