什么时候javascript错误会破坏其余的代码?

Cla*_*nga 15 javascript jquery

我注意到有时候一个javascript错误会打破其他无关的javascript功能,有时它不会.我无法在其中看到一个模式,这使得调试变得困难(特别是当你接受一个旧项目而你没有时间来修复所有错误时).

例如这段代码:

$(".div-one").slick({ // settings for slick plugin });
Run Code Online (Sandbox Code Playgroud)

打破了这段代码:

$('.product-options').click(function() {
    $('.message').slideToggle('show');
});
Run Code Online (Sandbox Code Playgroud)

.div-one页面上没有元素时.它重新调整了元素未定义的错误.所以我把它包装在if语句中检查.div-one的长度,现在代码工作正常.

但显然有很多情况下javascripts错误不会破坏任何东西.

那么什么时候js错误会导致问题?这两段代码在同一个文件中.也许它只影响同一个文件?

谢谢!

T.J*_*der 14

JavaScript与其他语言没有区别,在这方面有例外.

如果你有:

doThis();
doThat();
doSomethingElse();
Run Code Online (Sandbox Code Playgroud)

...并doThat抛出一个异常,它之后的代码(doSomethingElse在这种情况下)永远不会运行(在所有语言中都有异常,包括JavaScript).

所以如果你有:

$(".div-one").slick({ /* settings for slick plugin */ });

$('.product-options').click(function() {
    $('.message').slideToggle('show');
});
Run Code Online (Sandbox Code Playgroud)

...以及slick抛出异常的调用,它下面的单击处理程序永远不会被连接,因为该代码不会运行.

相反,如果slick 抛出异常,但稍后当您使用任何光滑的功能并且它失败时,这将不会影响单击处理程序,因为该失败并不会阻止单击处理程序被连接起来.

与其他具有例外的语言一样,您可以控制异常的影响; 在JavaScript(以及其他几个)的情况下,您可以使用try/catch(和可选finally)块来执行此操作,例如:

try {
    $(".div-one").slick({ /* settings for slick plugin */ });
} catch (e) {
    // Some appropriate handling of the exception
}
try {
    $('.product-options').click(function() {
        $('.message').slideToggle('show');
    });
} catch (e) {
    // Some appropriate handling of the exception
}
Run Code Online (Sandbox Code Playgroud)

在那里,异常调用slick不会阻止单击处理程序被连接.