JavaScript 中 setTimeout 和 setInterval 函数的传参及调用
在 JavaScript 中,setTimeout 和 setInterval 函数都是用于在指定的时间点执行某个函数的,但是它们的传参方式和调用方式却有所不同。
setTimeout 函数
setTimeout 函数用于在指定的时间点执行某个函数,语法格式为 `setTimeout(func, delay, [arg1, arg2, ...])`,其中 `func` 是要执行的函数,`delay` 是延迟的时间,`arg1, arg2, ...` 是要传递给函数的参数。
在传递参数时,需要注意的是,如果直接传递变量作为参数,可能会出现意外的结果。例如:
```javascript
var str = 'aaa';
setTimeout('auto(str)', 4000);
function auto(a) {
alert(a);
}
```
这段代码可能会输出 `aaa`,因为 `str` 是全局变量,但是这不是我们想要的结果。
要想传递除字符串意外的参数,可以使用闭包的方式。例如:
```javascript
var num = 2;
function test() {
var str = 'bbb';
setTimeout(auto(str), 4000);
}
function auto(str) {
return function() {
alert(str);
}
}
test();
```
这样可以正确地传递参数。
setInterval 函数
setInterval 函数用于在指定的时间点重复执行某个函数,语法格式为 `setInterval(func, delay, [arg1, arg2, ...])`,其中 `func` 是要执行的函数,`delay` 是延迟的时间,`arg1, arg2, ...` 是要传递给函数的参数。
在使用 setInterval 函数时,也需要注意参数的传递方式。例如:
```javascript
var num = 2;
function auto() {
alert(num);
}
setInterval(auto, 4000);
```
这段代码将会报错,因为 `auto` 函数没有被正确地传递给 `setInterval` 函数。
要想正确地传递参数,可以使用闭包的方式。例如:
```javascript
var num = 2;
function auto() {
alert(num);
}
setInterval(function() {
auto();
}, 4000);
```
这样可以正确地传递参数。
总结
在使用 setTimeout 和 setInterval 函数时,需要注意参数的传递方式和调用方式。使用闭包可以正确地传递参数,避免出现意外的结果。同时,需要注意函数的调用方式,例如 `setTimeout(auto, 4000)` 和 `setInterval(auto, 4000)`,这两种方式都是正确的调用方式。