如何检查函数是否已定义?

Ben*_*oit 30 javascript jquery

如何检查函数是否已定义?

San*_*ich 42

用于检查函数是否存在的Javascript函数.

使用jQuery.isFunction(),您可以测试一个参数来检查它是否是(a)定义的,(b)是否为"function"类型.既然你要求使用jQuery,这个函数就会让你感到满意.

jQuery.isFunction(YourFunction)
Run Code Online (Sandbox Code Playgroud)

如果你因为某种原因不想使用jQuery,这里有一个基于Idealog代码的准系统函数,它将检查变量是否属于类型function.

function isFunction(fn){
    return typeof fn === 'function'
}
Run Code Online (Sandbox Code Playgroud)

有时你已经知道它是一个函数,并且为了优化,没有理由重新检查它的类型,在这种情况下,这里只是检查是否variable定义了[可能是一个函数]的函数

function isDefined(foo){
    return typeof(foo) !== 'undefined'
}
Run Code Online (Sandbox Code Playgroud)

如何使用这些功能

使用jQuery:

function foo(){}
if(jQuery.isFunction(foo)) alert('This is a function');
Run Code Online (Sandbox Code Playgroud)

使用上面提供的任何非jQuery Javascript函数.根据使用环境,这些功能可能是可靠的,也可能是不可靠的.请参阅以下内容

function foo(){}
if(isFunction(foo)) alert('is of type function');
if(isDefined(foo)) alert('if this is a function, it is defined');
Run Code Online (Sandbox Code Playgroud)

检查未定义和使用 jQuery.isFunction

if (typeof myfunc !== 'undefined' && $.isFunction(myfunc)) {
    //do something
}
Run Code Online (Sandbox Code Playgroud)

资源

jQuery.isFunction()是否优越?

根据凯尔佛罗伦萨的 说法,jQuery.isFunction()它在某些情况下可能更优越 在使用jQuery方法的某些边缘情况下特别有用,请参阅他的解释.

在某些浏览器的某些情况下,事物作为"函数"类型被错误地返回,或者事实上函数的事物作为另一种类型返回.您可以在此处看到几个测试用例:https: //github.com/jquery/jque ...

一个例子:

var obj = document.createElement("object");

// Firefox说这是一个函数类型的obj; // =>"功能"

请记住,这些主要是边缘情况,但$ .isFunction的原因只是为了对某个函数的某些东西持肯定态度(这对于jQuery库本身来说非常重要,可能对你的代码来说不是那么重要).

感谢patrick dw指出Kyles文章.(Patrick DW删除了他的账号)

来自jQuery.com

注意:从jQuery 1.3开始,浏览器提供的函数(如alert()和DOM元素方法(如getAttribute())不能保证在Internet Explorer等浏览器中被检测为函数.

  • 也许是jquery.isFunction的组合,并检查'​​undefined'是否到位.[源(http://stackoverflow.com/a/20027726/1257607) (2认同)

Pet*_*r C 17

像这样:

if (typeof myFunc != 'undefined') {
    // Assign myFunc
}
Run Code Online (Sandbox Code Playgroud)

不要只是测试它undefined,这不是一个常数,可以重新分配.


Ric*_*ton 6

if (typeof(functionName) == 'function') {
}
Run Code Online (Sandbox Code Playgroud)