关于js function(){}

一直没有想明白为什么 setInterval(function(){},1000) //setInterval不停的调用里面的函数,但是里面的function(){}没有定义命名如何调用?

SetInterval里面的function(){}是否等于(function(){})() //可能我表达得不清楚,只是一直有这个疑惑

阅读 2.6k
6 个回答

只是一种简写,不用理会为什么会这样,解释不清的,管用就行;

var fn=function(){};
setInterval(fn,1000)

你扔个function变量进去也行的

setInterval拿到了function(){}的引用。
你手动调用需要名字,所以没有名字你不能调用。

function cb (fn) {
    fn()
}
cb(function(){console.log(1)})

你传入的function (){console.log(1)}有没有名字?cb函数能不能调用它?


fn和fn()的区别是,后者是前者的返回值。

function(){}是参数,内部只需类似cb()就可以了

setInterval第一个参数是函数类型,正常情况应该是

setInterval(function(){},1000) 

这么用的,为什么setInterval(fn,1000)可以,因为fn是一个函数的引用,调用fn的时候就相当于调用函数

SetInterval里面的function(){}不等于(function(){})()(function(){})()是一个立即执行的函数,返回的是一个运行结果,里面返回类型不是函数的话会报错

let intervalID = window.setInterval(func, delay[, param1, param2, ...]);

所以像这样的调用 setInterval(function(){},1000),里面的形参 func,就获取到了function(){}的引用,在函数内部随意调用,
所谓的没法调用,也只是指在 setInterval 函数外部,

类似这样(function(){})()
共同点是: 都是匿名函数,没法使用函数名递归的调用自己,
不同点是: (function(){})()也没有赋值给 其他变量,只能被调用一次,setInterval里面利用 func变量,可以在函数内部调用多次。

js里函数是以函数对象的形式存在的,表面上看不到函数的名称,但是计时器栈里保存了方法所在的位置,到点儿了拿出来用就行了

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