一道有关setTimeout的面试题

setTimeout   只执行一次  可用来实现js代码异步执行
setInterval    循环执行
console.log((function(){
      console.log(1);
      setTimeout(function(){
	     console.log(2)
	},1000)
	setTimeout(function(){
		console.log(3)
	},0);
	setTimeout(function(){
		console.log(4)
	},0);
	        console.log(5)
})())

答案是什么呢?  答案是:
     1    5  undefined   3   4  2

下面解析一下此题:
      首先要储备的知识点是: 1、setTimeout 中的时间是  以 “ms” 为单位的, 而且 即便是 0ms 也是有时间的,因为setTimeout中的时间是有时间误差的;  2、如果函数没有 return 返回值, 那么 就会 出现 undefined ,不要问为啥出现undefined, 我也不知道!

     这一点就能判断出 一部分答案了:  1   5   3  4  2

但是为啥还有个 “undefined” ?
    因为最外层的  console.log() 里面包含的是一个立即执行函数 IIFE (Immediately Invoked Function Expression) ,居然没有return返回值,那肯定是undefined的了! 
 
但是为啥要在“1 5 ”的后面呢?

    因为“return xxxxx” 一般是写在函数的最后的,不然所以的console不就都不执行了嘛!可是即便写在最后,上面有setTimeout,那也得执行在setTimeout之前,但幸亏没有写return 不然,那几个setTimeout也不会执行的啦!

    so   最后的答案想必我就不多嘴了吧!
    最后声明: 如有错误,欢迎批评指出!再次谢过~~~

      


  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值