gpt4 book ai didi

Javascript 代码仅在 FireFox 中在 try-catch block 中失败

转载 作者:行者123 更新时间:2023-11-28 19:27:26 26 4
gpt4 key购买 nike

考虑以下代码:

if (window.addEventListener) {
window.addEventListener('load', someFunction, false);
} else if (window.attachEvent) {
window.attachEvent('onload', someFunction);
}

function someFunction() {
alert('Execute!');
}

这适用于 Chrome、FireFox、IE。我收到警报“执行!”。但是,如果我将其包装在 try-catch block 中,如下所示:

try{
if (window.addEventListener) {
window.addEventListener('load', someFunction, false);
} else if (window.attachEvent) {
window.attachEvent('onload', someFunction);
}

function someFunction() {
alert('Execute!');
}
}catch(e){
alert(e.message);
}

然后在 FireFox 中我得到“someFunction 未定义”。我在其他浏览器中得到“执行”。

有人能解释一下为什么会这样吗?我花了一天的时间在互联网上搜索任何可以远程解释这一点的资源。

假设我对 try block 内的代码没有任何控制权,但我想捕获任何潜在的错误,以便低于以下的代码仍然可以执行。我认为 try-catch block 将是解决方案,但由于它在 FireFox 的这种情况下不起作用,还有其他选择吗?

最佳答案

Here ,这是一个类似的问题,我做了一个总结:

  1. 您可以轻松地将函数“someFunction”声明放在 try-catch block 之外。

  2. 将 try block 的内容包装在立即函数中似乎可以恢复该行为:

    try {
    (function(){
    hello();
    function hello() {
    alert("Hello world");
    }
    })
    }
    catch (err) {
    alert(err);
    }
  3. Firefox 对函数语句的解释不同,显然它们破坏了函数声明的声明提升,因此 Firefox 的工作方式与其他浏览器不同。

关于Javascript 代码仅在 FireFox 中在 try-catch block 中失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27581205/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com