为什么js的setInterval 方法传入的方法不能带上括号?

var sessionexpiretime = setInterval(checkSessionIsExpire, 1000); 可以
var sessionexpiretime = setInterval(checkSessionIsExpire(), 1000); 只执行一次

阅读 4.7k
8 个回答

你要明白带括号是啥意思呀,你可以执行以下代码

function getVal() {
  console.log('In getVal')
  return 123
}
console.log(getVal)
console.log(getVal())

结果是

[Function: getVal]
In getVal
123

意思就是不带括号的函数名本身getVal才代表这个函数,加了括号就变成调用这个函数了,表达式的值就变成这个函数执行后的返回值了。

带了括号函数就执行了啊……如果你函数返回的是一个方法 那就会继续执行方法的,如果没有 就像相当于在那里写了个undefined

首先,setInterval 的第一个参数是一个 function,它是一个回调函数,是需要被 setInterval 执行的,具体什么时候执行,也是 setInterval 说了算的(当然,根本上,还是由你传入的第二个参数决定)。如果你带了(),那就代表,你自己把它执行了,而没有交给 setInterval 去执行,你传入的第一个参数,也就只是一个 function 执行后的值而已,而不是 function 本身。
ps:多嘴一句,js基础很差,建议系统整理下 js 基础,再考虑其他的。

简单说,setInterval的第一个参数是一个回调函数,你加一个括号传入的是这个函数的返回值而不是函数本身,只执行一次是因为你在调用setInterval的时候函数自己执行了而不是该定时器带动函数去执行。

基础知识呀,不用太深入研究,带括号就执行了,不带括号表示把方法传入了。方法名后边加括号表示执行方法!!

//2选1,推荐第一种
var sessionexpiretime = setInterval(checkSessionIsExpire, 1000);
var sessionexpiretime = setInterval('checkSessionIsExpire()', 1000);

带括号不就执行了,所以延迟没用

新手上路,请多包涵

带括号函数就执行了,不带的代表把函数名当参数传递进入了

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题