2015-01-02 5 views
1

이벤트가 발생할 때 호출되는 함수를 만들었습니다. 내 함수의 직접 호출이 작동하지 않으며 익명의 함수를 사용해야합니다. 왜 그렇게해야합니까? 누군가 그 같은 어리석은 실수를 저지르는 것을 피하기 위해 논리를 설명 할 수 있을까요?함수의 매개 변수로 함수 사용 : 익명 함수를 사용하는 이유는 무엇입니까?

+2

을 : 먼저 간단한 예를 살펴 수 있습니다. _a 참조가 예상되면 함수를 호출하면 안됩니다. 또는 호출 할 함수가 함수 참조 (또는 익명 함수)를 반환하는지 조심하십시오. – Teemu

+0

내가 이해하는 한, 함수의 매개 변수에서 직접 함수를 호출 할 수는 없습니까? 항상 익명의 함수를 사용해야합니다. – DescampsAu

+1

우리는 할 수 있으면, 그 특정 매개 변수가 원래 호출 된 함수에서 사용되는 방법에 의존합니다. – Teemu

답변

3

그것은 아무튼

$('#signup-email').change(function(){ 
    checkInBackEnd($('#signup-email'), 'email-unique.php', function(result){ 
     if(result == 1){ 
      $('#signup-error-email').show(); 
     } 
     else{ 
      $('#signup-error-email').hide(); 
     } 
    }); 
); 

당신에게 감사 : 함수를 직접 호출

$('#signup-email').change(
    checkInBackEnd($('#signup-email'), 'email-unique.php', function(result){ 
     if(result == 1){ 
      $('#signup-error-email').show(); 
     } 
     else{ 
      $('#signup-error-email').hide(); 
     } 
    }) 
); 

을 checkInBackEnd 때문에

내가 익명 함수가 변경 함수를 사용하기 때문에 작동 작동하지 않습니다 익명의 기능이 있어야합니다. 이름이 지정된 함수를 정의 할 수 있습니다 :

function doCheckIn() { 
    checkInBackEnd($('#signup-email'), 'email-unique.php', function(result){ 
    if(result == 1){ 
     $('#signup-error-email').show(); 
    } 
    else{ 
     $('#signup-error-email').hide(); 
    } 
} 

을 다음 콜백 인수로 되었 이러한 콜백 함수가 아니라 한 곳에서 필요하기 때문에

$('#signup-email').change(doCheckIn); 

우리는 일반적으로 익명 함수를 사용합니다. 한 번만 사용하면 이름을 지정할 필요가 없습니다. 잠시 후에 당신은이 관용구에 익숙해 질 것입니다.

하지만 중요한 점은 이벤트 바인딩 함수에 대한 인수가 함수 여야한다는 것입니다. 이 함수는 이벤트가 트리거 될 때까지 호출되어서는 안됩니다. .change()에 함수 호출을 넣으면 함수는 나중에는 아니고 이벤트 바인딩을 설정할 때 호출됩니다.

0
는 더 잘 이해하기 위해 코드를 브레이크

:`checkInBackEnd은 ($이 (...))`함수 호출 때문에 발생

function fakeChangeFunction(myFn) { 
    val result = myFn(); // We expect to have a function 
    doSomethingWithResult(result); 
} 

function myChangeFunctionExample() { 
    alert('foobar'); 
    // returns undefined implicitly 
} 

// Doesn't work 
fakeChangeFunction(myChangeFunctionExample()); // This will cause an error 

// Works 
fakeChangeFunction(myChangeFunctionExample); // Notice no parenthasis 

// Works 
fakeChangeFunction(function() { 
    myChangeFunctionExample(); 
}); 

// Works 
function returnsAFunction() { 
    return function() { 
    alert('barfoo'); 
    }; 
} 

fakeChangeFunction(returnsAFunction()); 
관련 문제