2015-01-05 8 views
1

Сегодня я увидел navigator.geolocation.getCurrentPosition(function(obj){console.log(obj)}) код. В этом методе getCurrentPosition метод возвращает объект геопозиции в качестве параметра, если вы передали функцию в этом методе. Интересно, как это работает. Если у меня есть метод, возвращающий строку, и я хочу, чтобы он возвращался так же, как и 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, No. Вы можете назвать его '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) Cll обратный вызов асинхронно (например 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>

Смежные вопросы