setInterval(func, delay) 中 func 该如何写才有效?

2016-01-25 12:01:19 +08:00
 iugo

这样写是没问题的:

var num = 3
result = window.setInterval(function(i = num) {
console.log(i)
}, 1000)

这样写在 FireFox 中 setInterval 只执行了一次:

var num = 3
var printText = function(i = 4) {
console.log(i)
}
result = window.setInterval(printText(num), 1000)

2189 次点击
所在节点    JavaScript
5 条回复
yyfearth
2016-01-25 12:12:38 +08:00
这不是很明显么?

result = window.setInterval(printText(num), 1000)
你直接调用了 printText 一次 而不是让 setInterval 去调用

result = window.setInterval(printText, 1000) 这样才对啊
plqws
2016-01-25 12:18:14 +08:00
如果想要传参进去可以弄个闭包:

var num = 3
var printText = function(i = 4) {
return function() {
console.log(i)
}
}
result = window.setInterval(printText(num), 1000)
yimity
2016-01-25 12:20:36 +08:00
如果你非要这么调用,那么就
result = window.setInterval(function(){printText(num)}, 1000)
iugo
2016-01-25 12:24:05 +08:00
基本常识, 以前一直忽略...
https://segmentfault.com/q/1010000000732577
xieranmaya
2016-01-29 10:22:41 +08:00
第一个参数是函数,不是函数的返回值。。。当然如果函数的返回值也是一个函数是没问题的
你第二种写法`setInterval(print(num),300)`相当于把 print(num)的返回值传给了 setInterval 。。。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/253164

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX