如何向setTimeout传入带参数的函数?解决类型错误问题
解决setTimeout传入带参数函数的问题
嘿,我来帮你理清这个问题!你当前代码出错的原因很明确:
setTimeout(test(2, 3), 3000)里的test(2,3)会立刻执行,返回的是计算结果5(一个数值),但setTimeout要求第一个参数必须是函数引用,而非数值,所以就触发了类型错误。
下面给你三种常用的正确写法:
方法一:用匿名函数包裹
这是最直观的方式,把带参数的函数调用放进一个匿名函数里,传给setTimeout的是这个匿名函数的引用,3秒后才会执行它:var test = function(a, b) { return a + b; }; setTimeout(function() { test(2, 3); }, 3000);方法二:使用bind()绑定参数
bind()方法会创建一个新函数,预先把你要传的参数绑定好,第一个参数是函数内部的this指向(这里test没用到this,传null就行):var test = function(a, b) { return a + b; }; setTimeout(test.bind(null, 2, 3), 3000);方法三:利用setTimeout的额外参数(ES5+支持)
setTimeout从第三个参数开始,会自动作为参数传递给第一个参数的函数,这种写法最简洁:var test = function(a, b) { return a + b; }; setTimeout(test, 3000, 2, 3);
内容的提问来源于stack exchange,提问作者Bidhan Sarkar
相关产品推荐
相关产品推荐

