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')
if ('function' === typeof callback) ...
typeof(callback) == "function"
내가 할지도 모른다
try{
callback();
}catch(e){};
나는 대답이 받아 들여진다는 것을 알고 있지만 아무도 이것을 제안하지 않았다. 이것이 관용구의 설명에 맞는지 확실하지 않지만 모든 경우에 작동합니다.
최신 JavaScript 엔진에서는 a finally
를 대신 사용할 수 있습니다.
function something_cool(text, callback){
alert(text);
if(typeof(callback)=='function'){
callback();
};
}
이 시도:
callback instanceof Function
@Venkat Sudheer Reddy Aedama 라이브러리 의 출처 를 보면 밑줄을 볼 수 있습니다.
_.isFunction = function(obj) {
return typeof obj == 'function' || false;
};
이것은 단지 내 힌트, 힌트 답변입니다 :>
시험:
if (!(typeof(callback)=='undefined')) {...}
http://underscorejs.org 를 사용하는 경우 다음 이 있습니다. http://underscorejs.org/#isFunction
_.isFunction(callback);
jQuery 함수가 정의되어 있는지 쉽게 확인하는 방법을 찾고있었습니다.
아마도 필요할 수도 있습니다.)
if(typeof jQuery.fn.datepicker !== "undefined")
경우 callback()
이 함수에서 한 시간 동안하지 요구하고있다, 당신은 재사용을 위해 인수를 초기화 할 수 있습니다 :
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();
}
}
제한은 정의되지 않았지만 항상 콜백 인수를 실행한다는 것입니다.
전역 함수 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
있지만 afaik. 의 값은 Function
프레임마다 다르므로 단일 프레임 응용 프로그램에서만 제대로 작동합니다. 우리가 보통 typeof
대신 사용 하는 이유 입니다. 일부 환경에서는 예외가있을 수 있습니다 ( typeof f
예 : MSIE 6-8 등). 예를 들어 일부 기능 alert
에는 "개체"유형이 있습니다.
로컬 기능에 따라 허용 된 답변에서 해당 기능을 사용할 수 있습니다. 함수가 로컬인지 전역인지 테스트 할 수 있습니다.
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
if( (typeof window.myFunction)=='function')
alert('myFunction is function')
else
alert('myFunction is not defined');
//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 something_cool(text, callback){
callback && callback();
}
참고 URL : https://stackoverflow.com/questions/85815/how-to-tell-if-a-javascript-function-is-defined
'IT' 카테고리의 다른 글
'ImportError : 가져올 수없는 이름 IncompleteRead'는 어떻게 수정합니까? (0) | 2020.03.20 |
---|---|
Java에서 쌍 또는 2 개의 튜플 사용 (0) | 2020.03.20 |
동일한 그래프에서 ggplot2를 사용하여 두 변수를 선으로 플로팅 (0) | 2020.03.20 |
Gson : String을 JsonObject로 직접 변환 (POJO 없음) (0) | 2020.03.20 |
HTML5 양식 필수 속성 (0) | 2020.03.20 |