如何检查JavaScript中是否定义了闭包?

时间:2014-09-11 13:55:09

标签: javascript closures

当我想检查是否定义了变量时,我就像

那样
if(myVar)
    ...

if(myClosure())
    ...

显然会检查闭包返回的内容,而不是自身。

检查是否定义了闭包的正确语法是什么?

5 个答案:

答案 0 :(得分:1)

变量包含一个函数并不重要,它仍然是一个变量。只是不要打电话。

if (myClosure) {

如果变量未声明且未定义,则会抛出引用错误。您可能更喜欢:

if (typeof myClosure !== "undefined") {

如果你想检查它是否是一个功能,那么:

if (typeof myClosure === "function") {

但是无法判断函数是否关闭了任何变量。

答案 1 :(得分:0)

如果您正在尝试确定某个范围内是否定义了某个符号,那么您最好还是

if (typeof symbol !== "undefined")

在严格模式下,仅测试未在某些封闭词法范围中定义为参数或变量的符号是错误的。当您使用typeof时,它就可以了。

答案 2 :(得分:0)

翻译

  

检查是否定义了闭包的正确语法是什么?

作为

  

我如何知道自己是否不在全球范围内?

var __test_if_global__ = {};
if (__test_if_global__ === window.__test_if_global__) {
    // you are in global scope
    // delete window.__test_if_global__;
} else {
    // you are not in global scope
}

如果您只是想检查一下,您可以参考某些变量,请像往常一样检查polyfills等

答案 3 :(得分:-1)

闭包只是一个变量,其值是一个函数。如果要检查名称是否定义为函数,请使用:

if (typeof myClosure == 'function')

答案 4 :(得分:-1)

这取决于你如何宣布这个功能。

如果您使用function declaration,那么从编译时开始,该函数始终可用。

if (myTestFunction()) {
  // do stuff
}

function myTestFunction() {
  return true;
}

另一方面,如果您使用function expression,则必须首先评估该表达式。

var myTestFunction = function() {
  return true;
}

if (myTestFunction()) {
  // do stuff
}

第三个选项是你传入一个函数引用INTO另一个函数,比如回调:

function doIt(callbackFunction) {
  if (typeof callbackFunction === "function") {
    callbackFunction(); // execute it.
  }
}