关于JavaScript中回调函数疑问?

像对于setInterval()函数中第一个函数参数,我有点疑问。我知道它可以传一个匿名函数如:setTimeout(function(){alert("test")},... 像对于setInterval()函数中第一个函数参数,我有点疑问。

我知道它可以传一个匿名函数如:setTimeout(function(){alert("test")},10);
也可以先定义好一个test函数再写成这样setInterval("test()",10)。

但是匿名函数不是等于函数名吗?只有后面跟()才算执行吗?那第二种写法按理说不应该是setInterval(test,10) ,写成setInterval("test()",10)不是相当于传了一个函数执行结果而不是函数名。为什么呢?
展开
 我来答
梦忠魂
2020-11-11 · TA获得超过299个赞
知道小有建树答主
回答量:392
采纳率:93%
帮助的人:172万
展开全部

function a(a1, b1){

console.log(a1, b1);

}

setTimeout(a, 3000, 'y', 'n')

首先,在控制台里,如果我输入 a,我只会得到一个代码内容的回调,如果我输入 a() 我就可以执行这个函数。而输入 'a()' 得到的是一个字符串 'a()'。

而 setTimeout 为了执行一个 'alert("计时器")' 这个字符串,就会像 eval 强制转换成可执行代码。

setInterval("test()",10)不是相当于传了一个函数执行结果而不是函数名

所以这句话话的理解是不正确的,你只是在执行一个字符串,他被强制转换成代码而已

追问
恩,你说eval我就大概明白了,那setInterval(test,10)这样写其实也是对的是吧。
类似的,在行内标签中使用btn绑定事件使用"Submit()"字符串,和先使用js找到它再绑定函数名$('button').onclick=Submit,和上面的例子是类似原理,对吗?
追答
其实 eval 的解释并不精确,只是为了便于理解这个执行的行为
实际上计时器执行字符串代码的时候,也是会包装成一个函数才去执行
onclick 属性的操作原理大径相同,onclick 属性也会把属性值传递到 click 事件上,形成一个 onclick 使用的函数体

setInterval(test,10) 才是标准的调用函数写法,这样不用再进行包装了,传参也更方便,如果需要给test 传参,就在时间后面追加

setInterval(test,10, 'arg1', 'arg2')
艾润堂健康养生
2020-11-11 · 超过74用户采纳过TA的回答
知道小有建树答主
回答量:2463
采纳率:25%
帮助的人:128万
展开全部
甘肃是小学五年级,还能学到的,在小学12年级不能学到分数,还没有到学函数的年龄段
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
今天的考试
2020-11-11 · TA获得超过1万个赞
知道大有可为答主
回答量:1.1万
采纳率:40%
帮助的人:2062万
展开全部
在干数据集,调用就可以。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式