即使条件为假,Internet Explorer 7 + 8也会在IF内执行变量声明

Sim*_*ger 1 javascript jquery internet-explorer if-statement

以下JavaScript在除IE 7和8之外的所有浏览器中都能正常工作:

if (typeof django != 'undefined') {
    console.log('Django admin loaded');
    var jQuery = django.jQuery;
}
Run Code Online (Sandbox Code Playgroud)

此代码位于Django管理界面和公共页面中加载的JavaScript文件之上.Django的管理员加载自己的jQuery,所以我们最好使用那个...

但是,即使条件(typeof django != 'undefined')是,IE 7和8也会在此if语句中执行变量赋值false.同时,console.log()没有执行: - /删除var关键字,相同的代码在IE 7和8中也能很好地工作:

if (typeof django != 'undefined') {
    console.log('Django admin loaded');
    jQuery = django.jQuery;
}
Run Code Online (Sandbox Code Playgroud)

但为什么?这没有任何意义,是吗?

Nie*_*sol 5

所有浏览器都会这样做.它被称为吊装.

function test() {
    if( false) {
        var abc;
    }
    alert(abc); // expect ReferenceError, get undefined
}
Run Code Online (Sandbox Code Playgroud)

既然你正在定义jQuery,你可能希望它作为一个全局变量,所以window.jQuery = django.jQuery应该做得很好.