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);
}
시험:
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
수로,, 실실니다다다다
ifcallback
null
★★★★★★★★★★★★★★★★★」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
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 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
'programing' 카테고리의 다른 글
Javascript는 지금까지 선행 0을 추가했습니다. (0) | 2022.10.11 |
---|---|
Eclipse 포맷터가 모든 에넘을 한 줄에 배치하지 않도록 하는 방법 (0) | 2022.10.11 |
MariaDB Galera 클러스터 참조 무결성 제약 조건 (0) | 2022.10.11 |
JSON 인코딩 MySQL 결과 (0) | 2022.10.11 |
Google Compute Engine VM에서 MySQL에 원격 연결 (0) | 2022.10.11 |