2015-01-05 47 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>