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

箭头函数与普通函数语法是否等价?代码报错原因咨询

为什么箭头函数在jQuery的each()中触发报错,而传统function语法正常?

这个问题其实是箭头函数和传统函数最核心的差异点——this的指向规则不同,在jQuery这类依赖动态this传递上下文的库中特别容易踩坑。

咱们先拆解一下你的代码:

报错的箭头函数版本问题出在哪?

const clean = (blurb) => { 
  blurb.find('a').each(()=> { 
    $(this).replaceWith($(this).html()) 
  }); 
}

箭头函数不会创建自己的this上下文,它会直接继承外层作用域的this。这里你的clean本身就是箭头函数,它的this继承自定义它的外部环境(如果是在模块里,这个this就是undefined;在全局环境下则是window)。当jQuery的each()方法尝试把当前遍历的DOM元素绑定到回调函数的this上时,箭头函数根本不吃这一套——它的this已经被词法作用域固定死了,所以$(this)里的this是undefined,自然会抛出Cannot read property 'createDocumentFragment' of undefined的错误(因为$(undefined)无法生成有效的jQuery对象)。

传统function为什么能正常工作?

const clean = (blurb) => { 
  blurb.find('a').each(function() { 
    $(this).replaceWith($(this).html()) 
  }); 
}

传统的function函数会在被调用时动态绑定this。jQuery的each()方法内部会通过call()或apply()把当前遍历到的DOM元素作为this传递给这个回调函数,所以$(this)能正确获取到对应的jQuery对象,执行replaceWith操作自然没问题。

如果你想用箭头函数怎么办?

如果就是偏好箭头函数的写法,完全可以不用依赖this,直接用each()回调提供的第二个参数——当前遍历的DOM元素:

const clean = (blurb) => { 
  blurb.find('a').each((index, element)=> { 
    $(element).replaceWith($(element).html()) 
  }); 
}

这样直接使用element参数,就绕开了this指向的问题,代码也能正常运行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 03:53:38