前端资源文件加载失败_一道不一样的前端架构师最终面试题

来自公众号:前端巅峰

本次写作来源于一次面试,前端架构师岗位,最后面试官临时给我掏出了一道比较少见的面试题 ,终究斩获offer ,虽然这道题并不难,但是考察的东西挺有趣,加上近期有看到前端防御性编程、优雅处理前端错误的文章,于是想起来把这道题写了下来。

这是一个关于前端错误处理的题目,由浅入深

340ed3f1c1475103a6e65f57d50f2982.png

本题答案: xxxx未定义,致命错误,之前无错误捕获处理机制,页面没有跳转到百度

第二个版本:

5fe8c85833be2bee4960bcc7aeb6e9bc.png

这里还是比较简单,因为try里面才会捕获错误,一旦抛出错误就会被全局捕获错误的函数捕获  最终输出顺序:    try  抛出错误   全局捕获到错误

加入函数调用版本,问最终打印台输出什么

5b999886c39e6cb40e8d765188670649.png

调用test,执行test,执行完了try同步代码后,执行抛出Error,结束test的函数的调用(只要函数内部抛出错误,就会结束这个函数的调用并且出栈),全局捕获到的错误,还是‘抛出错误’这个我们自己定义的错误内容,console.log(a)并没有被执行到 

变异版本

1389676ebf8c0a0b7dff4eedace4979f.png

这里主要考察的是函数的抛出错误配合finally的执行,我们一直认为,只要函数内部抛出错误,就会结束这个函数调用,立马出栈。所以return和throw new Error不能在一起用,但是finally却还是依然会执行。finally,顾名思义,最后都会执行

finally 语句在 try 和 catch 之后无论有无异常都会执行。

加入webpack工程化构建的变异版本,选中此html为模板,问, 如果其他通过webpack构建的文件发生了致命错误,例如因为做了tree sharking,没有兼容低版本浏览器,此时可以捕获到全局错误吗

d6e7906409e2142939b5a5d882c12f91.png

答案是不可以捕获到,因为经过webpack打包后,代码会变成

d5504dd5d7b84e18f5e8d10459fe0be9.png

如果此时其他模块发生了致命错误,例如const这种代码跑在IE6中,那么就会直接致命错误,阻断浏览器解析代码,页面挂掉。js引擎也不会去解析下面的代码~ 还没有运行到window.onerror这里就挂了 

上面只是一个比较简单的面试题,考察错误处理能力,后面是结合React的错误边界,资源请求错误,ajax请求错误等的处理来口述,这里可能需要你平时对这些东西有比较多了解和实践才能hold住

window.onerror与window.addEventListener('error')捕获js运行时错误

使用window.onerror和window.addEventListener('error')都能捕获,但是window.onerror含有详细的error堆栈信息,存在error.stack中,所以我们选择使用onerror的方式对js运行时错误进行捕获。

资源加载错误使用addEventListener去监听error事件捕获

实现原理:当一项资源(如

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值