2012-12-21 3 views
2


매개 변수가있는 콜백을 제공 할 수 있습니까?

function abc(arg1,arg2, callback){ 
     console.log(arg1 + arg2) // I am doing something really interesting 
     if(callback){ 
     callback(arg1+ arg2) 
     } 
    } 
    function add(){ 
      console.log("from call back " + arguments[0]) 
    } 

    var a =10; 
    abc(1,2, add) 


이 잘 작동하지만 우리가 필요하면 다시 호출에 약간의 추가 인수를 보내, 우리는 무엇을해야합니까?
여기, 별도로 (arg1+ arg2)에서 나는 다른 인수가 콜백
abc의 호출 측에서 설정해야 그리고, abc(1,2,add)abc(1,2,add())의 차이점은 무엇입니까?
감사 :)

+2

:

콜백에 추가 매개 변수를 전달하는 일반적인 방법은 매개 변수를 통해 닫 익명 함수를 만드는 것입니다? –

답변

5
  • abc(1,2,add) => "함수 형식"으로서의 기능 인자주기. 이것은 나중에 호출 할 수 있도록 함수에 대한 포인터를주는 것과 같습니다.

  • abc(1,2,add()) =>add() 함수를 호출하고 해당 반환 값을 인수로 제공합니다.

콜백 지원이 인수 이상이 필요합니까? 자바 스크립트는 동적 언어이기 때문에, 단지 이상의 인수와 같은 콜백 함수를 호출

  • callback(1,2,3,4)
  • callback(1,2,3,4,5)
  • callback(1,2,3,4,5,6)합니다.

JavaScript는 함수 시그니처가 엄격하지 않습니다. 함수는 호출자가 제공 한만큼의 인수를가집니다. 예를 들어

,이 같은 콜백 함수 한 경우 :

function("hello"); // Where's the second argument?? 

자바 스크립트는 불평하지 않습니다

function(a, b) { 

} 

그리고 나중에 당신은이 방법을 문의하십시오. 단순히 b은 정의되지 않습니다.

1

추가 및 추가()의 차이 : 애드온 (함수 및 추가) 함수의 리턴 값이다. 함수의 더 많은 인수를 얻으려면. 인수 객체 사용 모든 함수에는 인수 객체가 있습니다. 인수 [0] == 1 인수 [1] == 2 인수 [2] == add.

1

당신은 원래 함수에서 매개 변수를 사용하여 콜백을 호출 할 수 있습니다 당신은 또한 당신의 함수 호출 내부 콜백에 대한 매개 변수를 제공 할 수 있습니다 : 당신이 다음 매개 변수를 내부 함수 호출과 함수를 호출하는 경우

function f1 (args, callback, params) { 
    callback.apply(this, params); // Params needs to be an array 
    callback.apply(this, [args]); // This would call callback with 1 param - args 
    callback.call(this, args); // This is the same as the line above 
} 

function f2() { 
    for (item in arguments) { 
     console.log(item); 
    } 
} 

f1('arg', f2, [1, 2, 3]); 

즉시 평가되고 콜백으로 실행되지 않습니다.

0

abc(1,2,add)abc(1,2,add())과의 차이는 두 번째 경우는 호출 addabc없는 점이다.결과는 add이 예상보다 훨씬 빨리 실행되고 아무런 인수도없이 실행된다는 것입니다. 당신의 콜백 "일부 추가 인수"를 통과하고 싶은

var a=10; 
var b=20; 
abc(a, b, function(text){ 
    add(a, b); 
    console.log(text); //logs "abc" 
}); 
관련 문제