콜백을 매개 변수로 다른 함수에 전달하는 방법


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 () 내부에서 선언 한 모든 변수에 액세스 할 수 있다는 것입니다 (자바 스크립트의 변수에는 로컬 범위가 있음).


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

어떤 것은하지 ->자바 스크립트 평균 @ 아무것도 특수 - 여기?
shenkwen

->그냥 정상적인 기능입니다. var test = function(str, callback) { ajax call }
BarryMode

@shenkwen 얇은 화살표->는 JavaScript가 아닌 CoffeeScript 구문이며, 단순히 JavaScript로 컴파일 할 때 일반 JavaScript 함수를 의미합니다. JavaScript에는 유사한 화살표 함수 w3schools.com/Js/js_arrow_function.asp가 있습니다
Bryan

0

다음과 같이 JavaScript CallBak을 사용할 수 있습니다.

var a;

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


function1(function2);

또는 Java Script 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.