2010-06-28 2 views
3
function runSomething() { 
    // some stuff happens 
} 

$(selector).bind('event', runSomething()); 

$(selector).bind('event', runSomething); 

바인드의 두 가지 버전의 차이점은 무엇입니까?2 개의 jquery 바인드 간의 차이점

다음은 실제 예입니다 : 그것은 수행하는 방식으로 작동하는 이유 http://jsbin.com/icajo/edit

누군가가 설명 할 수 있습니다.

이벤트에 따라 함수를 실행하는 데 여러 개의 단추를 사용하려고하는데 어떻게해야합니까?

답변

0

자바 스크립트에서 매개 변수 집합을 함수에 전달하면 함수를 호출하고 반환 값을 계산합니다.

var test = function() { return 1; } // Creates a new function that returns 1 
alert(test.toString()); // => "function() { return 1; }" 
alert(test().toString()); // => "1" 

심지어 도 기능을 가리키는 변수 일뿐입니다. runSomething()를 호출 할 때 첫 번째 예는, 즉시 그 기능을 평가하는 경우

alert(alert); // => "function alert() { [native code] }" 

그래서, 다음에 bind() 파라미터로서 반환 값을 전달한다.사용자의 경우, 페이지가로드 될 때, 다음 자체 bind() 전달되는 가변 runSomething 함수를 사용 undefined 번째 예에서

bind()에 전달 alert()을 evals. Bind는 이벤트가 발생할 때만 해당 함수를 사용합니다.

정말 당신의 마음을 날려, 당신은 예를 들어 ... 올바른 함수를 반환하는 함수, 다음 (첫 번째 예에서와 같은) 기능을 평가를 할 수 그것은 단지 모두에 따라 달라집니다

var counter = 0; 
function GenerateNext() { 
    counter++; 
    return new Function("alert(" + counter + ")"); 
} 

a = GenerateNext(); 
b = GenerateNext(); 
b() // will alert 2 
a() // will alert 1 

$(selector).bind('event', GenerateNext()); // alert 3 
$(selector).bind('event', a); // alert 1 
$(selector).bind('event', b); // alert 2 

당신은하려고합니다. 함수 자체를 전달하거나 함수의 반환 값을 전달하십시오.

5

첫 번째 경우에는 runSomething() 호출 결과를 두 번째 함수 자체에 바인딩합니다.


@JSNewbie 업데이트 이것을 실행하고 각 경고에 보는 것을 말한다.

function runSomething() { 
    return 3; 
} 

var a1 = runSomething(); 
var a2 = runSomething; 
alert(a1); 
alert(a2); 
+0

그래서 두 번째 버전에서는 문제가 발생하지 않습니까? – JSNewbie

+0

@JSNewbie : 두 번째 버전에서는 이벤트에 대해 함수를 실행하지만 첫 번째 버전에서는 바인딩 할 때 함수가 이벤트를 반환 할 때 함수를 실행합니다. – tcooc

+0

너무 이론적으로 미안해, 나는 이해하지 못해. 누군가가 나의 실제적인 예를 근거로 설명 할 수 있는가? – JSNewbie

0
기능 runSomething 바인드 문 내에서 실행되는 첫 번째 줄에서

, 그리고 무엇을 당신의 runSomething 기능은 그 기능이 결합되어 다른 기능을 반환하는 경우, 예를 들어, 이벤트에 바인딩 반환하고있을 것 이벤트에 따라 실행됩니다.

두 번째 행에서 runSomething 함수는 해당 행에서 실행되지 않으며 "이벤트"가 발생하는 경우에만 실행됩니다.

0

$(selector).bind('event', 'runSomething()'); ('runSomething()' 주위에 따옴표가 있음) 이벤트를 수신하면 runSomething() 함수를 실행하십시오.

$(selector).bind('event', runSomething);

이 이벤트에 포함 된 어떤 매개 변수를받을 것을 의미합니다 이벤트에 대한 콜백 함수와 같은 기능 runSomething()를 설정하고, 종종이 currentTarget (그래서 당신은 많은 버튼에 같은 ​​이벤트를 사용할 수 있습니다) 또는 유용합니다 이벤트에서 특정 정보를 얻습니다 (mousemove는 트리거 될 때 마우스의 X, Y 위치를 반환합니다).

이벤트가 트리거 될 때 반환되는 이벤트 개체에 액세스해야하는 경우 첫 번째 버전이 제대로 작동하지 않습니다.

function runSomething(event){ 
    console.log(event); // this would show the event object if the second code is used. 
} 
0

자바 스크립트 함수는 변수로 처리됩니다. "()"를 추가하면 함수가 호출되고 함수의 결과가 전달됩니다 (함수가 아무 것도 반환하지 않으면 'undefined'가 될 수 있음). 두 번째 방법은 이벤트가 트리거 될 때 호출 할 함수에 대한 핸들을 제공하기 때문에 bind 메서드를 사용하는 적절한 방법입니다.

관련 문제