当我想检查是否定义了变量时,我就像
那样if(myVar)
...
但
if(myClosure())
...
显然会检查闭包返回的内容,而不是自身。
检查是否定义了闭包的正确语法是什么?
答案 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.
}
}