var timerId = setTimeout(func|code, delay)
上面代码中,setTimeout 函数接受两个参数,第一个参数 func|code 是将要推迟执行的函数名或者一段代码,第二个参数 delay 是推迟执行的毫秒数。
console.log(1);
setTimeout(‘console.log(2)’,1000);
console.log(3);
上面代码的输出结果就是1,3,2,因为 setTimeout 指定第二行语句推迟 1000 毫秒再执行(如果这在 Sublime 下运用插件以 nodejs 环境来执行,许解释器不同,会报错)。
需要注意的是,推迟执行的代码必须以字符串的形式,放入 setTimeout,因为引擎内部使用 eval 函数,将字符串转为代码。如果推迟执行的是函数,则可以直接将函数名,放入 setTimeout。一方面 eval 函数有安全顾虑,另一方面为了便于 JavaScript 引擎优化代码,setTimeout 方法一般总是采用函数名的形式,就像下面这样。
function func(){
console.log(2);
}
setTimeout(func,1000);
// 或者
setTimeout(function (){console.log(2)},1000);
setTimeout 传参数
除了前两个参数,setTimeout 还允许添加更多的参数。它们将被传入推迟执行的函数(回调函数)。
setTimeout(function(a,b){
console.log(a+b);
},1000,1,1);
上面代码中,setTimeout 共有 4 个参数。最后那两个参数,将在 1000 毫秒之后回调函数执行时,作为回调函数的参数。
IE 9.0 及以下版本,只允许 setTimeout 有两个参数,不支持更多的参数;可以在匿名函数中,让回调函数带参数运行,再把匿名函数输入 setTimeout;例如:
setTimeout(function() {
myFunc(“one”, “two”, “three”);
}, 1000);
当然也可以使用 bind 或 apply 方法来解决。
例如使用 bind 方法,把多余的参数绑定在回调函数上面,生成一个新的函数输入 setTimeout。
setTimeout( function(arg1){}.bind(undefined, 10), 1000 );
上面代码中,bind 方法第一个参数是 undefined,表示将原函数的 this 绑定全局作用域,第二个参数是要传入原函