Javascript 脚本中未捕获的引用错误

Javascript 脚本中未捕获的引用错误,javascript,Javascript,这可能很简单,但我对JavaScript不是很在行,所以这里有点困难。我有以下代码: //Internet Explorer if (navigator.appName == "Microsoft Internet Explorer") { //Set IE as true ie = true; //Create a user agent var var ua = navigator.userAgent; //Write a new regEx to fi

这可能很简单,但我对JavaScript不是很在行,所以这里有点困难。我有以下代码:

//Internet Explorer
if (navigator.appName == "Microsoft Internet Explorer") {
    //Set IE as true
    ie = true;
    //Create a user agent var
    var ua = navigator.userAgent;
    //Write a new regEx to find the version number
    var re = new RegExp("MSIE ([0-9]{1,}[.0-9]{0,})");
    //If the regEx through the userAgent is not null
    if (re.exec(ua) != null) {
        //Set the IE version
        ieVersion = parseInt(RegExp.$1);
    }
}
else if (navigator.appName == 'Netscape') {
    ie = true;
    var ua = navigator.userAgent;
    var re  = new RegExp("Trident/.*rv:([0-9]{1,}[\.0-9]{0,})");
    if (re.exec(ua) != null) {
        ieVersion = parseInt( RegExp.$1 );
    }
}
else {
    ie = false;
    ieVersion = null;
}

jQuery(document).ready(function() {
    if(ie == true && ieVersion > 7){
        jQuery("<br />").insertAfter(".entry-title wbr");
    }
});
我得到以下错误:

未捕获引用错误:未定义ieVersion


我很难理解为什么它没有定义。有人能解释一下吗?

在脚本顶部有一个很大的if/else if/else块,它可能会设置ieVersion

这三个部分中的每一部分都有一个变量赋值,但其中一些部分在另一个if中有赋值

例如,这意味着您可以在navigator.appName=='Netscape'时匹配,然后在re.execua!=null,因此永远不会到达ieVersion=语句

解决此问题的最简单方法是设置默认值:

ieVersion = null;
在脚本的最顶端


您还应该显式声明它var ieVersion=null,因为这被认为是很长一段时间以来的最佳实践,JavaScript严格模式需要它。

要么声明var ieVersion=null;在初始方法之前,或使用window.ieVersion,即

在if block之前定义ieVersion,如var ieVersion=null;还要将条件更改为ifie==true&&ieVersion&&ieVersion>7尝试在带有var ieVersion的标记之后将ieVersion声明为顶部的全局变量如果用户代理与regexp不匹配,则不设置ieVersion。您应该设置一个默认值或添加一个else子句。我曾假设在else语句中设置它会声明它,因为如果前两种情况不适用,则始终如此,但显然不适用!