programing

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

copysource 2022. 10. 11. 22:48
반응형

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")

자체로)됩니다.falseundefined,null,0 , 「」false와의 .null지나치게 구체적입니다.

변수가 정의되어 있지 않은 경우에도 함수가 구현되어 있는지 여부를 판별하는 이러한 메서드는 실패합니다.따라서 문자열 수신을 지원하는 보다 강력한 기능을 사용하고 있습니다.

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

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

시험:

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

JavaScript를 처음 접한 저는 동작이 변경되었는지 잘 모르겠습니다만, Jason Bunting(6년 전)이 제공한 솔루션이 가능한 기능을 정의하지 않으면 작동하지 않습니다.

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

이렇게 하면ReferenceError: possibleFunction is not defined엔진이 가능한 기호를 해결하려고 할 때 오류가 발생합니다.Jason(Jason)

이 동작을 방지하려면 체크하려는 함수의 이름만 전달할 수 있습니다.그렇게

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

이를 통해 체크할 함수 또는 정의되지 않은 경우 빈 객체로 변수가 설정되므로 위의 문제가 발생하지 않습니다.

그럴지도 몰라

try{
    callback();
}catch(e){};

받아들일 수 있는 답변이 있는 건 알지만, 아무도 이것을 제안하지 않았어요.이것이 관용적인 표현에 맞는지는 잘 모르겠지만, 모든 경우에 효과가 있습니다.

에서는 JavaScript가 사용됩니다.finally대신 사용할 수 있습니다.

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

시험:

if (!(typeof(callback)=='undefined')) {...}

이것을 시험해 보세요.

callback instanceof Function

@Benkat Sudheer Reddy Aedama가 언급한 라이브러리의 출처를 보면 다음과 같이 알 수 있습니다.

_.isFunction = function(obj) {
  return typeof obj == 'function' || false;
};

이건 내 힌트야, 힌트 답:>

옵션 체인과 함수 호출을 사용하면 다음 작업을 수행할 수 있습니다.

function something_cool(text, callback) {
    alert(text);
    callback?.();
}

ifcallback수로,, 실실니다다다다

ifcallbacknull ★★★★★★★★★★★★★★★★★」undefined에러는 발생하지 않고, 아무 일도 일어나지 않습니다.

「」의 경우는, 「」입니다.callback문자열이나 숫자 등 다른 것이 있으면 TypeError는 계속 느려집니다.

http://underscorejs.org 를 사용하는 경우는, http://underscorejs.org/ #isFunction 이 표시됩니다.

_.isFunction(callback);

jQuery 함수가 정의되어 있는지 확인하는 방법을 찾고 있었는데 쉽게 찾을 수 없었습니다.

필요할지도 몰라;)

if(typeof jQuery.fn.datepicker !== "undefined")

이 경우,callback()함수 내에서 1회만 호출하는 것이 아니라 재사용을 위해 인수를 초기화할 수 있습니다.

callback = (typeof callback === "function") ? callback : function(){};

예를 들어 다음과 같습니다.

function something_cool(text, callback) {
    // Initialize arguments
    callback = (typeof callback === "function") ? callback : function(){};

    alert(text);

    if (text==='waitAnotherAJAX') {
        anotherAJAX(callback);
    } else {
        callback();
    }
}

제한사항은 정의되어 있지 않지만 항상 callback 인수가 실행된다는 것입니다.

글로벌 기능의 경우 이 기능을 사용할 수 있습니다.eval그 중 하나의 답변에 제시되어 있습니다.

var global = (function (){
    return this;
})();

if (typeof(global.f) != "function")
    global.f = function f1_shim (){
        // commonly used by polyfill libs
    };

사용할 수 있습니다.global.f instanceof Function그렇긴 한데, 깜짝 놀랐어.의 가치Function프레임마다 다르므로 단일 프레임애플리케이션에서만 정상적으로 동작합니다.그래서 우리가 주로 쓰는 건데typeof대신.일부 환경에서는 다음과 같은 문제가 발생할 수 있습니다.typeof f예를 들어 MSIE 6-8에 의한 일부 기능alert"object" 유형이 있습니다.

로컬 기능에 따라 승인된 답변에 있는 것을 사용할 수 있습니다.함수가 로컬인지 글로벌인지도 테스트할 수 있습니다.

if (typeof(f) == "function")
    if (global.f === f)
        console.log("f is a global function");
    else
        console.log("f is a local function");

질문에 답하자면, 최신 브라우저에서는 예제 코드가 오류 없이 작동하기 때문에 무엇이 문제였는지 잘 모르겠습니다.

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

주의: 다음을 사용합니다.callback !== undefined대신callback != null하지만 그들은 거의 같은 일을 한다.

이전 답변의 대부분은 이 기능을 호출하는 부작용이 있습니다.

여기서의 베스트 프랙티스

기능이 있습니다.

function myFunction() {
        var x=1;
    }
direct way to test for it

//direct way
        if( (typeof window.myFunction)=='function')
            alert('myFunction is function')
        else
            alert('myFunction is not defined');
using a string so you can have only one place to define function name

//byString
        var strFunctionName='myFunction'
        if( (typeof window[strFunctionName])=='function')
            alert(s+' is function');
        else
            alert(s+' is not defined');

함수를 재정의할 경우 함수는 발생 위치에 관계없이 글로벌하게 정의되므로 발생 순서에 따라 정의된 함수 변수를 사용하는 것이 좋습니다.

같은 이름의 이전 함수를 호출하는 새 함수를 만드는 예:

A=function() {...} // first definition
...
if (typeof A==='function')
   oldA=A;
A=function() {...oldA()...} // new definition

이건 내게 효과가 있었다.

if( cb && typeof( eval( cb ) ) === "function" ){
    eval( cb + "()" );
}

이하의 기능을 추천합니다.

function isFunction(name) {
    return eval(`typeof ${name} === typeof Function`);
}

한 줄 솔루션:

function something_cool(text, callback){
    callback && callback();
}

언급URL : https://stackoverflow.com/questions/85815/how-to-tell-if-a-javascript-function-is-defined

반응형