Я понимаю, что передача функции в другую функцию в качестве обратного вызова и ее выполнение, но я не понимаю лучшую реализацию для этого. Я ищу очень простой пример, как это:
var myCallBackExample = {
myFirstFunction : function( param1, param2, callback ) {
// Do something with param1 and param2.
if ( arguments.length == 3 ) {
// Execute callback function.
// What is the "best" way to do this?
}
},
mySecondFunction : function() {
myFirstFunction( false, true, function() {
// When this anonymous function is called, execute it.
});
}
};
В myFirstFunction, если я возвращаю новый callback (), тогда он работает и выполняет анонимную функцию, но это не кажется мне правильным подходом.
arguments
это не массив, вы все равно можете ссылаться на его длину какarguments.length
... попробуйте. Это свойство относится к числу фактически переданных аргументов, а не обязательно к числу параметров в сигнатуре функции.Ответы:
Вы можете просто сказать
В качестве альтернативы вы можете использовать
call
метод, если вы хотите настроить значениеthis
внутри обратного вызова.Внутри функции
this
будет все, чтоnewValueForThis
есть.источник
Вы должны проверить, существует ли обратный вызов и является ли он исполняемой функцией:
Многие библиотеки (jQuery, dojo и т. Д.) Используют аналогичный шаблон для своих асинхронных функций, а также node.js для всех асинхронных функций (nodejs обычно передается
error
иdata
для обратного вызова). Просмотр их исходного кода поможет!источник
callback
к строке, а затем проверяете ее тип? Повысит ли это производительность? Это все равно что проверить тип, проверить, возвращает ли преобразованное логическое значение true, а затем снова проверить его тип и проверить его на соответствие строке. Не могли бы вы объяснить, почему?typeof(callback)
достиг бы этого для вас?typeof(null) === "Object"
,typeof("undefined") === "undefined"
callback
не приводится к строке, ее тип проверяется, чтобы узнать, является ли она функцией, прежде чем она будет вызвана. Код предположительно принимаетcallback
в качестве аргумента и не уверен, что аргумент имеет вызываемый тип - или, возможно, аргументы имеют различные типы в попытке обеспечить форму полиморфизма, где код может по-разному реагировать на разныеtypeof
аргументы.Есть 3 основных варианта выполнения функции:
Выбор метода зависит от того:
Документы для Function.call , Function.apply
источник
Обратные вызовы - это сигналы, а «new» - создание экземпляров объектов.
В этом случае было бы еще более уместно выполнить просто «callback ();» чем "return new callback ()", потому что вы все равно ничего не делаете с возвращаемым значением.
(И тест arguments.length == 3 действительно неуклюж, правда, лучше проверить, что параметр обратного вызова существует и является функцией.)
источник
правильная реализация будет:
это делает параметр обратного вызова необязательным.
источник
Ты можешь использовать:
Приведенный ниже пример является немного более полным:
источник
Вот базовый пример, который объясняет
callback()
функцию в JavaScript:JSFiddle
источник
источник