You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Safari与WebKit环境下异步匿名函数执行差异问题咨询

异步函数跨浏览器执行差异结论

该现象属于Safari内置JavaScriptCore引擎的实现Bug,不符合ECMAScript规范要求。

差异产生原因

  • ES规范明确规定:函数形参与函数内部同名var声明的变量共享同一作用域绑定,变量提升阶段仅标记变量存在,不会覆盖已完成初始化的形参值。
  • 普通同步函数的作用域初始化逻辑在所有浏览器中都符合规范,问题仅出现在Safari对异步函数的作用域处理流程中:Safari错误地在异步函数执行初期先将内部var声明的同名变量赋值为undefined,直接覆盖了传入的形参值,导致首次打印输出undefined。

复现验证

使用同步函数测试时,所有浏览器输出完全一致,可确认是异步函数实现问题:

(function(v) {
    console.log(v)
    var v = v || '#';
    console.log(v)
})('@')
// 统一输出:
// '@'
// '@'

规避方案

  • 避免在函数内部声明与形参同名的var变量,改用let/const声明不同名的业务变量即可彻底规避该问题
  • 若特殊场景必须使用同名变量,可将变量赋值逻辑前置到函数最顶部,避免在声明前调用同名标识符

内容的提问来源于stack exchange,提问作者YanAlex

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 19:48:00