MST

星途 面试题库

面试题:复杂 JavaScript 函数方法在多环境下的兼容性策略

在一个同时需要兼容现代浏览器、旧版本浏览器以及不同移动设备环境的项目中,要使用 `Promise` 的 `finally` 方法。由于部分环境不支持,你需要制定一套全面的兼容性优化策略,不仅要保证功能正常,还要考虑性能和代码可维护性。请详细阐述你的策略,并给出关键代码片段。
45.5万 热度难度
编程语言JavaScript

知识考点

AI 面试

面试题答案

一键面试
  1. 兼容性检测
    • 使用特性检测来判断当前环境是否支持 Promise.prototype.finally
    if (typeof Promise.prototype.finally!== 'function') {
        // 不支持,进行polyfill
    }
    
  2. Polyfill 实现
    • Promise.prototype.finally 提供一个 polyfill。
    if (typeof Promise.prototype.finally!== 'function') {
        Promise.prototype.finally = function (callback) {
            const P = this.constructor;
            return this.then(
                value => P.resolve(callback()).then(() => value),
                reason => P.resolve(callback()).then(() => { throw reason; })
            );
        };
    }
    
  3. 性能考虑
    • 由于 polyfill 只是在不支持的环境下添加方法,所以在支持 finally 的现代环境中,不会有额外的性能开销。
    • 而在旧环境中,finally 的 polyfill 是基于现有的 then 方法实现,虽然多了一些函数调用,但这是目前实现兼容性的常见方式,整体性能影响相对较小。
  4. 代码可维护性
    • 将 polyfill 放在项目的入口文件或者专门的兼容性处理文件中,这样可以集中管理兼容性代码,便于后续维护和更新。
    • 如果后续环境都支持 finally 了,可以直接删除该 polyfill 代码,对其他业务代码影响较小。

通过上述策略,能在保证 Promise.finally 功能在不同环境下正常使用的同时,兼顾性能和代码可维护性。