[javascript] JavaScript 함수가 정의되어 있는지 확인하는 방법

JavaScript의 함수가 정의되어 있는지 어떻게 알 수 있습니까?

나는 이런 식으로하고 싶다

function something_cool(text, callback) {
    alert(text);
    if( callback != null ) callback();
}

그러나 그것은 나를 얻는다

콜백은 함수가 아닙니다

콜백이 정의되지 않은 경우 오류가 발생합니다.



답변

typeof callback === "function"


답변

현재의 모든 답변은 리터럴 문자열을 사용합니다. 가능한 경우 코드에없는 것을 선호합니다.

function isFunction(possibleFunction) {
  return typeof(possibleFunction) === typeof(Function);
}

개인적으로 코드에 걸려있는 문자열 수를 줄이려고합니다 …


또한 typeof함수가 아니라 연산자 라는 것을 알고 있지만 구문을 사용하면 후자로 표시되는 데 거의 해가 없습니다.


답변

if (callback && typeof(callback) == "function")

가 평가 (자체)이 콜백주의 false가있는 경우 undefined, null, 0, 또는 false. 과 비교하면 null지나치게 구체적입니다.


답변

변수가 정의되어 있지 않으면 함수가 구현되었는지 알려주는 메소드도 실패하므로 문자열 수신을 지원하는 더 강력한 것을 사용하고 있습니다.

function isFunctionDefined(functionName) {
    if(eval("typeof(" + functionName + ") == typeof(Function)")) {
        return true;
    }
}

if (isFunctionDefined('myFunction')) {
    myFunction(foo);
}


답변

JavaScript를 처음 접했을 때 동작이 변경되었는지 확실하지 않지만 가능한 경우 기능이 정의되어 있지 않으면 Jason Bunting (6 년 전)이 제공 한 솔루션이 작동하지 않습니다.

function isFunction(possibleFunction) {
  return (typeof(possibleFunction) == typeof(Function));
}

ReferenceError: possibleFunction is not defined엔진이 possibleFunction 기호를 해결하려고 시도 하면 오류가 발생합니다 (Jason의 답변에 대한 주석에서 언급 한 바와 같이)

이 동작을 피하려면 검사하려는 기능의 이름 만 전달하면됩니다. 그래서

var possibleFunction = possibleFunction || {};
if (!isFunction(possibleFunction)) return false;

변수를 확인하려는 함수 또는 정의되지 않은 경우 빈 개체로 설정하므로 위에서 언급 한 문제를 피할 수 있습니다.


답변

시험:

if (typeof(callback) == 'function')


답변

function something_cool(text, callback){
    alert(text);
    if(typeof(callback)=='function'){ 
        callback(); 
    };
}