2011-09-15 4 views
0

다음과 같이 JS 코드가 있습니다.Javascript 함수 호출에 대한 질문

window.onbeforeunload = function saveFav() { 
//Some JS code 
} 

지금이 같은 기능은

그래서 난 그냥 함수를 직접으로 호출하고 링크를 클릭 핸들러에서 호출 할 필요가;

$("#someLink").click(function() { 
    saveFav(); 
}); 

그러나 saveFav이() ... 일부 구문 문제가 있거나 기능 만 페이지 언로드에 호출되는 링크를 클릭에서 호출 점점되지 않는 몇 가지 이유에 대한 ?

언로드와 링크 클릭 모두에서 동일하기 때문에 코드를 복제하고 싶지 않습니다.

도와주세요. 고맙습니다.

+1

함수에 이름이 있지만 함수 식을 사용하면 해당 이름에 대한 기호가 생성되지 않습니다. –

+1

@Felix 함수 표현식에서 함수 이름을 지정하는 유일한 목적은 재귀를위한 것입니다. –

+0

@Jacob : 바로 그 이름은 함수 내부에서만 접근 할 수 있습니다. 그러나 명명 된 함수 표현식은 IE의 버그 (같은 함수의 두 인스턴스 생성)로 인해 어쨌든 훌륭한 아이디어가 아닙니다. –

답변

7

정말 간단과 같이 한 번 함수를 정의 :

function saveFav() { 
    //... 
} 

을 다음 적절한 처리기에 할당 :

window.onbeforeunload = saveFav; 
$("#someLink").click(saveFav); 

을 만들기 때문에 코드가 작동하지 않는 이유 뒤에 추론이다 named function expression아니요 기호를 현재 범위에서 함수 이름 ra 함수 자체가 재귀 적으로 호출 할 수있는 유일한 목적을 위해 이름 자체는 함수 자체의 범위 내에 존재합니다.

2

당신은 모두에 할당 한 다음 함수를 정의하고 싶지 :

function saveFav() { 
    //Some JS code 
} 

window.onbeforeunload = saveFav; 
$("#somelink").click(saveFav); 

당신은 물론 다른 물건을 수행 익명 함수를 호출하기 위해 이러한 이벤트 중 하나를 할당 할 수 있습니다, 다음 saveFav를 호출 그러나 saveFav 만 호출하는 익명의 함수를 정의 할 필요는 없습니다.

0

saveFav 함수를 이러한 방식으로 호출하려면 onbeforeunload에 할당하기 전에 함수를 정의해야합니다.

+2

올바른지,'saveFav' *는'beforeunload' 이벤트 핸들러입니다. 내부에는 정의되어 있지 않습니다. –

관련 문제