为何setTimeout()无法将_.run()作为函数参数传入?
问题原因解析
你的核心问题出在函数调用和函数引用的区别上:
错误写法
setTimeout(_.run(), 1000)里,_.run()是立即执行函数——代码运行到这一行时,_.run会马上被调用,它的返回值(如果没写return就是undefined)会被传给setTimeout。但setTimeout的第一个参数需要的是待执行的函数本身,不是函数执行后的结果,所以这种写法会导致_.run立刻执行,且1秒后没有任何预期的延迟操作。可行写法
setTimeout( () => { _.run() }, 1000)里,你传给setTimeout的是一个匿名箭头函数的引用。1秒后,这个匿名函数才会被执行,进而调用_.run(),这就实现了延迟执行的效果。
补充一种更简洁的正确写法
如果_.run内部没有依赖this的指向问题(你的代码里_.run是箭头函数,this绑定不会变,完全适用),你可以直接传函数引用,不用包裹箭头函数:
setTimeout(_.run, 1000);
这里_.run没有加括号,意味着你把函数本身传给了setTimeout,1秒后setTimeout会自动调用这个函数。
内容的提问来源于stack exchange,提问作者extensa5620
相关产品推荐
相关产品推荐

