关于 JS setTimeout 立即调用,没有延迟效果的解决办法?

今天在学习的时候遇到了 setTimeout 立即调用的问题,很费解,于是就研究了一下。

这是我原来的代码:

function getAge(value) {
  console.log(value)
}
setTimeout(getAge(18), 2000)

后来发现 setTimeout 的第一个参数必须是需要编译的代码或者是一个函数方法,而如果直接传入一行可执行代码,那么抱歉,这里会立即执行,没有延迟效果。

解决办法如下:

(1)让第一个参数成为函数

setTimeout(function () {
  getAge(18)
}, 2000)

(2)使用附加参数(一旦定时器到期,它们会作为参数传递给 function

setTimeout(getAge, 2000, 18)

思考:

有人可能会疑惑,我之前那个 getAge(18) 不是也是函数吗?

其实是这样的:一个函数名后跟一个 ( ) ,表明立即调用函数,所以 setTimeout 就没有延迟效果了。


论证:

setTimeout(
  (function () {
    getAge(18)
  })(),
  2000
)

该 setTimeout 也会立即输出,在控制台打印 18

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值