コールバックをパラメーターとして別の関数に渡す方法


83

私はajax関数とコールバック関数を初めて使用します。概念がすべて間違っている場合はご容赦ください。

問題:コールバックを実行する別の関数にパラメーターとしてコールバック関数を送信できますか?

function firstFunction(){
    //some code

    //a callback function is written for $.post() to execute
    secondFunction("var1","var2",callbackfunction);
}

function secondFunction(var1, var2, callbackfunction) {
    params={}
    if (event != null) params = event + '&' + $(form).serialize();

    // $.post() will execute the callback function
    $.post(form.action,params, callbackfunction);
}

回答:


125

うん。関数参照は他のオブジェクト参照と同じように、心ゆくまで渡すことができます。

より具体的な例を次に示します。

function foo() {
    console.log("Hello from foo!");
}

function caller(f) {
    // Call the given function
    f();
}

function indirectCaller(f) {
    // Call `caller`, who will in turn call `f`
    caller(f);
}

// Do it
indirectCaller(foo); // alerts "Hello from foo!"

次の引数を渡すこともできますfoo

function foo(a, b) {
    console.log(a + " + " + b + " = " + (a + b));
}

function caller(f, v1, v2) {
    // Call the given function
    f(v1, v2);
}

function indirectCaller(f, v1, v2) {
    // Call `caller`, who will in turn call `f`
    caller(f, v1, v2);
}

// Do it
indirectCaller(foo, 1, 2); // alerts "1 + 2 = 3"


13

また、次のように単純にすることもできます。

if( typeof foo == "function" )
    foo();


2

はい、もちろん、関数はオブジェクトであり、渡すことができますが、もちろん、それを宣言する必要があります。

function firstFunction(){
    //some code
    var callbackfunction = function(data){
       //do something with the data returned from the ajax request
     }
    //a callback function is written for $.post() to execute
    secondFunction("var1","var2",callbackfunction);
}

興味深いことに、コールバック関数は、firstFunction()内で宣言した可能性のあるすべての変数にもアクセスできます(javascriptの変数にはローカルスコープがあります)。


0

CoffeeScript

test = (str, callback) ->
  data = "Input values"
  $.ajax
    type: "post"
    url: "http://www.mydomain.com/ajaxscript"
    data: data
    success: callback

test (data, textStatus, xhr) ->
  alert data + "\t" + textStatus

->javascriptで何を意味しますか?@ nothing-special-here
shenkwen 2016

->単なる正常な機能です。 var test = function(str, callback) { ajax call }
BarryMode 2016年

@shenkwen細い矢印->はCoffeeScript構文であり、JavaScriptではなく、JavaScriptにコンパイルされたときの通常のJavaScript関数を意味します。JavaScriptは同様の矢印機能を有するw3schools.com/Js/js_arrow_function.asp
ブライアン

0

JavaScriptCallBakは次のように使用できます。

var a;

function function1(callback) {
 console.log("First comeplete");
 a = "Some value";
 callback();
}
function function2(){
 console.log("Second comeplete:", a);
}


function1(function2);

またはJavaScript Promise:

let promise = new Promise(function(resolve, reject) { 
  // do function1 job
  let a = "Your assign value"
  resolve(a);
});

promise.then(             

function(a) {
 // do function2 job with function1 return value;
 console.log("Second comeplete:", a);
},
function(error) { 
 console.log("Error found");
});
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.