我们知道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...文章比较浅,别喷我!!!