Javascript在调用函数/类之前查找函数/类是否存在

Javascript在调用函数/类之前查找函数/类是否存在,javascript,function,exists,Javascript,Function,Exists,我知道如何检查全局上下文的属性是否存在。任何变化 if (typeof myFunction != 'undefined'){...} 但是如果我不知道函数的名称呢?我想我可以做到这一点 if (typeof this['myFunction'] != 'undefined'){...} 但我不知道在这样的函数中如何做到这一点 function load(functionName){ if (typeof GLOBALCONTEX[functionName] != 'undefined'

我知道如何检查全局上下文的属性是否存在。任何变化

if (typeof myFunction != 'undefined'){...}
但是如果我不知道函数的名称呢?我想我可以做到这一点

if (typeof this['myFunction'] != 'undefined'){...}
但我不知道在这样的函数中如何做到这一点

function load(functionName){
  if (typeof GLOBALCONTEX[functionName] != 'undefined'){
    GLOBALCONTEX[functionName](arg1 , arg2 , ...);
  }
}

我不想使用try/catch,因为我听说它很慢。

在浏览器中,全局对象是。如果您使用另一个JavaScript执行环境(如Node.js),请查看其文档以找出全局对象的名称/引用


当然,这样的测试只适用于在全局范围内定义的函数,而不适用于任何更高范围内的函数。因此,这样的函数可能是可用的(并且可以访问),但它不在全局范围内。

全局上下文是窗口。所有对象都附着到它

function load(functionName){
      if (typeof window[functionName] != 'undefined'){
        window[functionName](arg1 , arg2 , ...);
      }
    }

如果使用浏览器,请将
GLOBALCONTEX
替换为
window
。例如:

function load(functionName){
  if (typeof window[functionName] != 'undefined'){
   window[functionName](arg1 , arg2 , ...);
  }
}

正如一些人指出的那样,情况并非总是如此(尽管可能99%的情况下都是如此),问题在于如何使用全局函数的名称作为字符串来调用它,这就是为什么它不如将函数作为对象来调用“一样好”。@katspaugh:这就是我删除它的原因。;)我会接受这个答案,因为这是最好的回答。快速提问,通过浏览器的javascript浏览量下降的百分比是多少?99%? 50%? 多多少少?