var tom = function tom()[alert('x');};
setInterval(tom(),2000);
//立即执行,执行一次后不再执行
与
var tom = function tom()[alert('x');};
setInterval(tom,2000);
//很多秒之后执行,之后2秒一次
请问在setInterval中,tom与tom()为什么会有这种区别?
为什么setInterval(tom(),2000);会立即执行且只执行一次?
var tom = function tom()[alert('x');};
setInterval(tom(),2000);
//立即执行,执行一次后不再执行
与
var tom = function tom()[alert('x');};
setInterval(tom,2000);
//很多秒之后执行,之后2秒一次
请问在setInterval中,tom与tom()为什么会有这种区别?
为什么setInterval(tom(),2000);会立即执行且只执行一次?
注意: setTimeout 的第一个参数是函数对象,一个常犯的错误是这样的 setTimeout(foo(), 1000), 这里回调函数是 foo 的返回值,而不是foo本身。 大部分情况下,这是一个潜在的错误,因为如果函数返回 undefined,setTimeout 也不会报错。
setInterval类似;
参考链接: JavaScript 秘密花园v
要么
var tom = function tom(){ console.log('x');};
setInterval(tom,2000);
要么
var tom = function tom(){ console.log('x');};
setInterval(()=>{
tom();
},2000);
10 回答11.3k 阅读
5 回答4.9k 阅读✓ 已解决
4 回答3.2k 阅读✓ 已解决
2 回答2.8k 阅读✓ 已解决
3 回答2.4k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答2.7k 阅读✓ 已解决
当问“立即执行,执行一次后不再执行”时,我猜你指的是“
alert
被立即执行了,并且此后没再执行”。下面我们来看看文档中是怎么介绍setInterval
方法的:你再看看你传的是什么?是
tom()
,这是what?这是一个函数调用,函数调用就会有返回值,所以你的setInterval(tom(),2000);
的实际效果是: