为什么setInterval(tom(),2000);会立即执行且只执行一次?

0

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);会立即执行且只执行一次?

5个回答

4

已采纳
var tom = function tom(){alert('x');};
setInterval(tom(),2000);

当问“立即执行,执行一次后不再执行”时,我猜你指的是“alert被立即执行了,并且此后没再执行”。下面我们来看看文档中是怎么介绍setInterval方法的:

注意func的要求是一个函数,然后这个函数将会被不断的重复调用。

你再看看你传的是什么?是tom(),这是what?这是一个函数调用,函数调用就会有返回值,所以你的setInterval(tom(),2000);的实际效果是:

var tom = function tom(){alert('x');};
var res = tom();//res其实是undefined,因为你的tom()并没有指定返回值
setInterval(res, 2000);

所以,每隔2秒都执行一次undefined,你还期望什么呢?

2

注意: setTimeout 的第一个参数是函数对象,一个常犯的错误是这样的 setTimeout(foo(), 1000), 这里回调函数是 foo 的返回值,而不是foo本身。 大部分情况下,这是一个潜在的错误,因为如果函数返回 undefined,setTimeout 也不会报错。

setInterval类似;

参考链接: JavaScript 秘密花园v

1

setInterval第一个参数是待执行函数,即时间到了后要执行的函数,而当你传入tom()时,setInterval在存的时候就已经执行了该函数了。

1

要么

var tom = function tom(){ console.log('x');};
setInterval(tom,2000);

要么

var tom = function tom(){ console.log('x');};
setInterval(()=>{
  tom();
},2000);
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值