setInterval() 函数在真机上崩溃问题

setInterval() 的语法允许调用时传递若干参数进入callback的,但今天在真机上遇到崩溃问题,而web端和微信小游戏模拟器上则能正常运行。非常奇怪。
API: setInterval(function, milliseconds, param1, param2, …)
当我传递param1等参数进入时,真机直接在此行崩溃。并且无有效的崩溃堆栈,仅提示 gameThirdScriptError…

  • Creator 版本:2.0.9

  • 目标平台: Android真机上 微信小游戏

  • 详细报错信息,包含调用堆栈:

  • 重现方式:
    向setInterval传递第三个参数如:setInterval(this.callback, 1000, arg). // arg=123。
    移除第三个参数,调用正常,添加参数则执行此行代码时抛出undefined;@requestFramexxx

  • 出现概率:必现

一般不是
setInterval((pa1, pa2) => {
// do something
}, 1000)

这种写法么?

setInterval(function, milliseconds, param1, param2, …)
Callback函数可以带参数。 你的写法没问题。 我这里的function就是带了参数的一个普通回调function. 而这个function 要想传递参数值,则需要在 调用setInterval的地方,也就是类似:
setInterval((par1,par2)=>{}, 1000, 123,456);
// 其中123,456,为调用时传递的实参数据。 这样在执行calback的时候 par1,par2才有值。
现在问题就是 我传递了123,等参数后,执行setInterval即崩溃。

好吧,这个没试过,其实我不明白什么情况下有这种需求。
如果每次都是固定的值,需要去作为参数传递吗?
如果每次都是变化的值,成员变量无法满足需求吗?

对!就是为了规避全局属性才这样做的。 因为全局属性不确定在什么时候就会被修改变化了。而计时器中却需要在每次开始调用时传递一个确定的参数值。这里用局部变量才能保证。

@jare 不知道这是wx问题还是creator问题。 就放在这里吧。一旦使用了第3个参数底层报错。报错信息还是莫名其妙。排查了2天才找出来。 请帮忙看一下为什么。这里是demo。wx小游戏在真机上测试100%复现。intervalTest.zip (1.1 MB)

你对 js 语法还不熟

start() {
    setInterval(this._intervalTest.bind(this, 500),500);
}

bind 函数的传参是这样传的:bind(object, ...param)

你说的很对,我按照你这样改了之后就好了。但我的写法在浏览器上没有问题。可能底层实现有点差别吧。