_.debounce防抖函数 在vue中使用this问题,应该传匿名函数而不是箭头函数

简单理解:_.debounce内部做了apply操作,箭头函数由于没有this,无法绑定this,导致最终this是undefined, 而匿名函数,成功通过applay绑定了this,所以this指向了vue组件实例。

javascript 复制代码
methods: {
	// 防抖动
    dSave1: _.debounce(() => {
      console.log(this) // undefined
      this.save()
    }, 500),
    // 防抖动
    dSave2: _.debounce(function(){ 
       console.log('ddd:', this) // this---> vm
    } , 500),
}

debounde函数:

可以看到内部incokeFunc对传入的func做了applay操作(绑定this),而匿名函数function(){}存在this可以被apply成功绑定;反之,因为箭头函数()=>{}本身没有this,所以applay操作无效,因此vue中使用debouncd函数,如果传入箭头函数,其this指向不是vue实例,而是undefined。

总结:

在使用 lodash.debounce 等方法的时候,为保证 this 正确的指向,回调函数推荐使用 匿名函数(function(){})。

箭头函数根本没有自己的 this,导致内部的 this 就是外层代码块的 this。(正因如此,call,apply,bind 就无法生效了,所以针对 this出现异常的情况,请优先考虑是否是因为箭头函数导致的。)

参考:https://blog.csdn.net/wswq2505655377/article/details/131962490

相关推荐
llz_1123 分钟前
第五周作业(JavaScript)
开发语言·前端·javascript
yannick_liu14 分钟前
nuxt4 + nuxt-swiper实现官网全屏播放
前端
苏打水com16 分钟前
JS基础事件处理与CSS常用属性全解析(附实战示例)
前端
W.Y.B.G18 分钟前
JavaScript 计算闰年方法
开发语言·前端·javascript
渣哥26 分钟前
你以为只是名字不同?Spring 三大注解的真正差别曝光
javascript·后端·面试
小六路27 分钟前
可以横跨时间轴,分类显示的事件
前端·javascript·vue.js
SuperherRo28 分钟前
JS逆向-安全辅助项目&JSRpc远程调用&Burp插件autoDecode&浏览器拓展V_Jstools(上)
javascript·安全·项目
比老马还六36 分钟前
Blockly文件积木开发
前端
Nayana37 分钟前
Element-Plus源码分析-select组件
vue.js
Nayana1 小时前
Element-Plus源码分析--form组件
前端