apply和call;拿函数防抖来解释:
function debounce(func, wait, immediate) {
let timer;
return function() {
let context = this,
args = arguments;
if (timer) clearTimeout(timer);
if (immediate) {
let callNow = !timer;
timer = setTimeout(() => {
timer = null;
}, wait);
if (callNow) func.apply(context, args);
} else {
timer = setTimeout(() => {
func.apply
}, wait)
}
}
}
这里面两个apply到底做了那些事?为什么要这么做?我到现在只觉得是为了传参,哪位大佬能给解个惑?拜谢
嗯,我看看
大致了解了,剩下不懂的我慢慢研究研究吧
根据 func
参数值动态调用对应的 function
就拿上面的防抖例子里面的apply来说,func.apply(context, args);这一步是做了什么?到最后使用这个函数的时候应该也是字面量赋值,或者直接立即执行此函数,this指向还是指向window的对吧?到最后不管是不是更改了this指向它都会指向window 那是不是可以理解这里的apply就是为了给 debounce 函数参数里面第一个参数传参做的准备?
这里的content这个this指向的应该也是window吧
@有点小九九: 我觉得就是为了传 context 保存的 this
@有点小九九: 推荐园子里的一篇博文 js中Function的apply方法与call方法理解
@dudu: 好的, 我去瞅瞅
@dudu: js,内置函数call和apply能更改this指向这一点懂了,但是牵扯到上面的问题就是它用的时候this指向是不是都是指向了window ?既然都是指向window,那是不是说明func.apply(context,args)是不是为了拿到传入debounce函数的函数传的参数(仅仅是针对上面的代码)?
建议改进一下排版,支持markdown语法
– dudu 4年前@dudu: 我也不知道到底怎么识别的 hh,缩进了一下,这次应该看起来好些了吧
– 有点小九九 4年前