浅谈setTimeout鲜为人知的第“三”个参数

我们知道setTimeout是js里面重要的函数,是一个宏任务,可以实现定时触发某种操作
常用方式
        setTimeout(fn,1000);
其实setTimeout还有第“三”个参数(为什么要加引号,因为可以有多个),今天我们来说说setTimeout的这些个参数

一、

setTimeout(function(){
    console.log(arguments)
}, 1000, 'param1','param2','param3')

打印的数据是:

从打印数据看,我们可以知道,后面的参数其实是作为前面函数的参数了;
二、如果后面的参数是一个对象,数组呢?

答案是显而易见的都是作为第一个函数的参数

三、如果后面的参数是函数呢?
运行一写代码后,发现,函数会执行,执行返回的值作为前面函数的参数
 

var i=0;
function sum(){console.log('我是回调函数里面的'); return 123}

setTimeout(function(){
    //arguments[0]()
    console.log(arguments)
    console.log('第二次'+i)
},1000,sum);

看我注释的那条,如果注释掉,打印的结果是 把后面的那个函数当成前面函数的参数了;
结果如图

如果放开注释就是这样的

var i=0;
function sum(){console.log('我是回调函数里面的'); return 123}

setTimeout(function(){
    arguments[0]() // 结果打印出了我是回调函数里面的
    console.log(arguments)
    console.log('第二次'+i)
},1000,sum);

/*
    我是回调函数里面的
VM1442:6 Arguments [ƒ, callee: ƒ, Symbol(Symbol.iterator): ƒ]
VM1442:7 第二次0
*/

 如果sum是个执行函数呢?结果是会把返回值给前面的函数,看下面的代码
 

var i=0;
function sum(){console.log('我是回调函数里面的'); return 123}

setTimeout(function(){
    console.log(arguments)
    console.log('第二次'+i)
},1000,sum());

/*Arguments [123, callee: ƒ, Symbol(Symbol.iterator): ƒ]
VM1488:6 第二次0*/

好啦,setTimeout分享到此结束,有问题可以一起交流ing...文章比较浅,别喷我!!!

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值