2012-08-02 6 views
0

존재하고 정의 된 함수가 비어 있는지 여부를 어떻게 확인하겠습니까? 예 :jQuery의 함수가 비어 있는지 어떻게 확인할 수 있습니까?

function foo(){ 
    // empty 
} 

function bar(){ 
    alert('something'); 
    // not empty 
} 

이 기능을 확인할 수있는 간단한 방법이 있습니까? 정말 매우 유용합니다, 일반적으로 좋은 생각이 아니다, 그러나 당신이 할 수있는

+2

실제 사용은 무엇 일 것입니다 :

function bar(t) { } 

이 정규식을 수정, 여기에 변수에 대한 지원과 같은 기능은? – JJJ

+0

특별히 JQuery를 사용하는 방법에 관심이 있으십니까? (JQuery! = JS) – nico

+0

@Nico, 잘 아니, JS 물론 괜찮을 것이다. 방금 jQuery 함수가 이미 존재할 것이라고 생각했습니다. 이미 간과하고있었습니다. – Joey

답변

3

:

function foo(){ 

} 

function bar(){ 
    alert('something'); 
    // not empty 
} 

console.log('foo is empty :' + isEmpty(foo)); 
console.log('bar is empty :' + isEmpty(bar)); 

function isEmpty(f) { 
    return typeof f === "function" && /^function [^(]*\(\)[ ]*{(.*)}$/.exec(
    f.toString().replace(/\n/g, "") 
    )[1].trim() === ""; 
}​ 

FIDDLE

을이 콜백을 확인하기 위해 단지 경우, 정상적인 방법으로는 확인된다

if (typeof callback === 'function') callback.call(); 

EDIT :

콜백 함수이면

는 의견을 무시하려면

function isEmpty(f) { 
    return typeof f === "function" && /^function [^(]*\(\)[ ]*{(.*)}$/.exec(
    f.toString().replace(/\n/g, "").replace(/(\/\*[\w\'\s\r\n\*]*\*\/)|(\/\/[\w\s\']*)|(\<![\-\-\s\w\>\/]*\>)/g, '') 
    )[1].trim() === ""; 
}​ 

FIDDLE

+0

기능에 댓글이 있으면 좋지만 작동하지 않습니다. – JJJ

+1

아니, 그 다음에 함수는 정말로 비어 있지도 않을 것입니다! – adeneo

+0

@Juhana - 댓글과 함께 작동하는 함수를 추가했습니다! – adeneo

1

함수는 비어 있지만 여전히 통과 변수가 될 수있다. 이 adeneo의 기능에 오류 것 :

function isEmpty(f) { 
    return typeof f === "function" && /^function [^(]*\([^)]\)[ ]*{(.*)}$/.exec(
    f.toString().replace(/\n/g, "").replace(/(\/\*[\w\'\s\r\n\*]*\*\/)|(\/\/[\w\s\']*)|(\<![\-\-\s\w\>\/]*\>)/g, '') 
    )[1].trim() === ""; 
}​ 
관련 문제