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

如何检查是否在JavaScript中定义了闭包?,javascript,closures,Javascript,Closures,当我想检查是否定义了变量时,我喜欢这样做 if(myVar) ... 但是 显然,将检查闭包返回的内容,而不是它本身 检查是否定义了闭包的正确语法是什么?变量是否包含函数并不重要,它仍然是一个变量。别这么说 if (myClosure) { 如果变量未声明或未定义,这将引发引用错误。您可能更喜欢: if (typeof myClosure !== "undefined") { 如果要检查它是否为函数,则: if (typeof myClosure === "function") {

当我想检查是否定义了变量时,我喜欢这样做

if(myVar)
    ...
但是

显然,将检查闭包返回的内容,而不是它本身


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

变量是否包含函数并不重要,它仍然是一个变量。别这么说

if (myClosure) {
如果变量未声明或未定义,这将引发引用错误。您可能更喜欢:

if (typeof myClosure !== "undefined") {
如果要检查它是否为函数,则:

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

无法判断函数是否在任何变量上关闭。

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

if (typeof myClosure == 'function')

这取决于您如何声明函数

如果使用
函数声明
,则该函数从编译时起始终可用

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

function myTestFunction() {
  return true;
}
另一方面,如果使用的是
函数表达式
,则必须首先计算该表达式

var myTestFunction = function() {
  return true;
}

if (myTestFunction()) {
  // do stuff
}
第三个选项是,如果要将函数引用传递给另一个函数,如回调:

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

如果您试图确定是否在范围中定义了符号,那么最好使用

if (typeof symbol !== "undefined")
在严格模式下,仅测试在某些封闭词法范围内未定义为参数或变量的符号是错误的。当您使用
typeof
时,它是可以的。

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

作为

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


如果您只想检查是否可以引用某些变量,请像检查polyfills等一样进行常规检查

是否
If(myClosure)
您不接受?在JS中,函数是一级公民,它会起作用。在这里使用闭包这个词让我有点头疼,但我的咖啡量很低。其次,我真的想知道为什么在这里使用闭包而不是
函数。检查是否定义了“闭包”或是否定义了“函数”有什么区别?这将触发ReferenceError@Tiborg-只有在变量未声明的情况下。你是对的,我不够清楚。但是,如果变量未声明,那么脚本的执行就会中断,我敢肯定,在简单检查是否声明了变量时,这并不是期望的结果。我已通过答案更改为使用
typeof
全局范围定义始终在任何地方都可用。引用变量时,JavaScript会沿着作用域层次结构一直向上移动到窗口(在浏览器中),直到找到该变量为止。在这种情况下,您实际上是在将变量与自身进行比较,如果未声明,它将抛出一个错误。如果它等于“undefined”且未初始化,则返回true。
if (typeof symbol !== "undefined")
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
}