setTimeout

本文介绍了在使用JavaScript的setTimeout函数时的两个实用技巧:如何在IE浏览器中为setTimeout中的函数传参,以及如何解决setTimeout调用的函数执行时的this指向问题。
今天学到了两个使用setTimeout的小技巧 如下:
(1) IE中给setTimeout中的调用函数传参数

IE是不支持在setTimeout中给被调用的函数传参数的,为了浏览器世界的和谐,我们可以把函数调用参数包裹进新的匿名函数中。示例:
function f(a){
alert(a);
}
// setTimeout(f,50,'hello'); //用于非IE
setTimeout(function(){f('hello')},50); //通用
var str='hello';
setTimeout(function(){f(str)},50); //通用

(2) this问题

setTimeout调用的函数被执行时的上下文是全局,而不再是调用setTimeout方法时的上下文。所以,setTimeout的第一个参数的函数被执行时其this是指向window的,如果需要保留调用setTimeout方法时的this,就需要把当时的this传进去。示例:
function Person(name){
this.name=name;
var f=function(){
alert('My name is '+this.name);
};

// setTimeout(f,50); //错误

var THIS=this;
setTimeout(function(){f.apply(THIS)},50); //正确,通用
setTimeout(function(){f.call(THIS)},50); //正确,通用
}
new Person('Hilary Young');
在 JavaScript 中,`setTimeout()` 是一个非常常用的函数,用于在指定的毫秒数后执行一次指定的函数或代码片段。它通常用于实现延迟执行的功能。 ### 基本用法 `setTimeout()` 的基本语法如下: ```javascript setTimeout(function, delay, [arg1, arg2, ...]); ``` - `function`:需要执行的函数。 - `delay`:延迟的时间(以毫秒为单位)。 - `arg1, arg2, ...`:可选参数,用于传递给 `function`。 例如,以下代码会在 2 秒后输出 "Hello, world!": ```javascript setTimeout(function() { console.log("Hello, world!"); }, 2000); ``` ### 使用字符串作为参数 虽然可以将函数以字符串的形式传递给 `setTimeout()`,例如: ```javascript setTimeout("console.log('Hello, world!')", 2000); ``` 但这种做法并不推荐,因为它会带来安全风险并可能导致性能问题。 ### 清除定时器 如果需要取消尚未执行的 `setTimeout()`,可以使用 `clearTimeout()`。`setTimeout()` 返回一个标识符,该标识符可以用于取消定时器: ```javascript var timerId = setTimeout(function() { console.log("This will not be executed."); }, 2000); clearTimeout(timerId); ``` ### 在类中使用 `setTimeout()` 在类中使用 `setTimeout()` 时,需要注意 `this` 的指向问题。可以通过将 `this` 保存在一个变量中来解决这个问题: ```javascript class MyClass { constructor() { this.value = 0; } startTimer() { setTimeout(() => { console.log(this.value); }, 1000); } } ``` ### 使用 `setTimeout()` 模拟 `setInterval()` 可以通过递归调用 `setTimeout()` 来模拟 `setInterval()` 的功能: ```javascript var i = 0; function xilou() { i += 1; if (i > 10) { console.log(i); return; } setTimeout(xilou, 1000); } xilou(); ``` ### 总结 `setTimeout()` 是一个非常有用的工具,可以用于实现延迟执行、定时任务等功能。在使用时需要注意 `this` 的指向问题,并且尽量避免使用字符串作为参数,以确保代码的安全性和可维护性[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值