一种小程序内使用setInterval循环调用有参函数的方法
首先介绍一下setInterval()
setInterval(functionName,millisec[,"lang"])
setInterval() 方法可按照指定的周期(以毫秒计)来调用函数或计算表达式。
setInterval() 方法会不停地调用函数,直到 clearInterval() 被调用或窗口被关闭。由 setInterval() 返回的 ID 值可用作 clearInterval() 方法的参数。
setInterval()第一个参数是函数类型,意味着你的函数没法加参数。如果加了参数就变成functionName(params),这是你函数的结果,而不是函数类型。
举个错误的例子,用setInterval实现文字循环播放
function a(that){
var s=that.data.motto
console.log(s)
var len= s.length
var s=s.substring(1,len)+s[0];
that.setData({
motto:s
})
}
Page({
data: {
motto: 'Hello World',
},
onShow:function(){
var that=this
setInterval(a(that),300) //这里a(that)会立即执行,并返回值
}
})
执行之后会报以下错误:

它说setInterval的第一个参数期望一个function但是没找到,就是因为a(that)返回的不是函数类型。
既然如此,解决办法也就随之而来了。它既然想要一个函数类型,我们给它返回一个函数类型不就行了。
修改后代码如下:
function a(that){
var s=that.data.motto
console.log(s)
var len= s.length
var s=s.substring(1,len)+s[0];
that.setData({
motto:s
})
return function(){
a(that)
}
}
Page({
data: {
motto: 'Hello World',
},
onShow:function(){
var that=this
setInterval(a(that),300) //这里a(that)会立即执行,并返回值
}
})
返回一个匿名函数继续调用a(that)
解决。
水平有限,欢迎交流。
引用请加说明。

