为什么在jQuery回调中检查变量是否会导致硬异常?

时间:2016-12-08 18:56:17

标签: javascript jquery callback

请注意,doesNotExist故意不存在,警报永远不会显示,而是我们在浏览器的控制台中留下错误。在jQuery回调中运行此代码有什么特别之处,这会让它像这样失败呢?

HTML:

<div>Shown! But we failed before the alert. Check your console...</div>

CSS:

div { display: none; }

JS:

$('div').fadeIn(100, function() {
    if (doesNotExist) {
        alert('Nope');
    }
    else {
        alert('Still nope');
    }
});

https://jsfiddle.net/mrpowell3j/gnhoheze/2/

2 个答案:

答案 0 :(得分:3)

在回调中运行该代码没有什么特别之处。无论它如何运行,它都会导致异常。在表达式中使用未声明的变量名称始终是错误(typeof除外)。

要检查是否定义了变量,可以使用

if (typeof doesNotExist === "undefined") {
  // it is undefined
}

现在只是告诉你它根本没有被定义,或者它没有价值;根据应用程序,可能是合适的。如果它应该是全球性的,那么:

if (!("doesNotExist" in window)) {
  // not defined
}

检查window对象中的属性,该对象是全局变量(全局var变量)。

答案 1 :(得分:2)

问题是你正在执行无效的javascript代码。在这种情况下,回调无关紧要。

您必须先使用变量初始化变量,或使用其他方法检查变量是否存在:

var variableName;
// execute your code.

-

//or checking if variable is defined.
if(typeof variableName !== 'undefined') {
   alert('nope');    
} else {
   alert('still nope');
}