关于 this 的问题

来源:16-8 手写防抖 debounce

h4ck3r

2020-06-22

'use strict'
function debounce(fn, delay = 500) {
  let timer = null
  return (...args) => { //箭头函数
    clearTimeout(timer)
    timer = setTimeout(() => {
      console.log(this) //使用严格模式:undefined 不使用严格模式:Window
      fn.apply(this, args) 
      //这里的 this 是 undefined 为什么后续的代码还能正常的运行呢?
    }, delay)
  }
}
const input1 = document.getElementById('input1') 
input1.addEventListener(
  'keyup',
  debounce((ev) => {
    console.log(ev.target) // <input type="text" id="input1">
    console.log(ev.target.value)
  }, 600)
)
写回答

1回答

双越

2020-06-22

这里的 this 是 undefined 为什么后续的代码还能正常的运行呢? —— 因为后续的代码没有用到 this 。

0
2
双越
回复
h4ck3r
现在可以用箭头函数跨函数获取 this ,确实可以让这里的 apply 解放了。不过,因为上述代码中 args 是一个参数即可,所以用 apply 去调用传递,会更方便一些。
2020-06-22
共2条回复

一天时间高效准备前端技术一面 匹配大厂面试要求

针对时下面试高频考点,帮助新人js面试快速通关

4694 学习 · 1681 问题

查看课程

相似问题