`
towaywu
  • 浏览: 16008 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

setTimeout使用闭包功能,实现定时打印数值

 
阅读更多

我们这次使用setTimeout来实现一个按照时间定时,依次打印数值的例子.其实在早期的时候,也是我经常犯的一个错误,或者实现这种能力,似乎js比较牵强,其实是我的错,哈哈!没能理解JS强大之处.我们直接进入主题吧!


注意,如果用setInterval来实现的话,那肯定很简单,这次我们是使用setTimeout.


我们先从最简单思考入手.那就会写出下面的代码.

for(var i = 0; i < 5; i++){

setTimeout(console.log(i),i*1000);

}

这段代码虽然依次打印了,每个i的值0,1,2,3,4.但是,执行的时间却没有起作用.为什么呢? 因为 console.log() 是方法的执行调用,在调用这个方法后,当是马上执行!,所以没有达到我们预期的目的


那我们继续看下面一段代码

for(var i = 0; i< 5; i++ ){

setTimeout(function(){

console.log(i);

},i*1000);

}

这里我们使用一个匿名函数包含了打印的console.log来打印i,所以 i这个值是共享的,还没等到执行第一个setTimeout的时候,for循环已经执行完成,最后的i = 5,所以i 会打印四次


其实我们两种解决办法,我们先来看第一种:

var j = 0;

function abc(){

console.log("j = "+j);

j++;

}


for(var i = 0; i < 10; i++ ){

setTimeout(abc,i*1000)

}

这里我们另外一个全局变量来存储值,每执行一次函数abc,j就加一次,所以执行到setTimeout的时候,就会调用abc函数,所以会达到我们预期的效果,但是这里这个j是一个全局变量,全局变量会造成容易改变其值或者命名冲突等问题.


第二种办法的实现,我们再次引入闭包函数.因为闭包函数,每一次创建都会存在一个自己的空间来存储唯一的值.所以利用这个思维.我们把代码写成下面的代码.

for(var i = 0; i < 10; i++ ){

(function(x){

setTimeout(function(){

console.log(x)

},x*1000)

})(i)

}


我们将i的每一次执行for循环的值,传给不同创建的闭包函数,这样每一个闭包函数里存储的i值,就都不会一样.所以就是达到我们的想要的结果.


本文属于吴统威的博客,微信公众号:bianchengderen,:186659233的原创文章,转载时请注明出处及相应链接:http://www.wutongwei.com/front/infor_showone.tweb?id=161 ,欢迎大家传播与分享.

分享到:
评论

相关推荐

    JavaScript setTimeout使用闭包功能实现定时打印数值

    利用闭包的功能,我们可以实现使用`setTimeout`来定时打印数值的需求。 首先,我们来看看为什么要使用闭包来实现这个功能。在JavaScript中,`setTimeout`会将传入的函数推迟到指定的时间后执行,但这并不意味着函数...

    使用闭包对setTimeout进行简单封装避免出错

    下面我们将深入探讨闭包、`setTimeout`以及它们如何结合以实现更安全、更易于维护的代码。 首先,`setTimeout`是JavaScript中的一个全局函数,它用于在指定的时间(以毫秒为单位)后执行一个函数或者一段代码。在...

    js闭包理解之倒计时

    在这个“js闭包理解之倒计时”的主题中,我们将深入探讨如何利用闭包实现一个实际项目中的倒计时功能。 首先,让我们了解一下闭包的基本概念。在JavaScript中,每当函数被创建时,它都会形成一个闭包,这个闭包包含...

    关于JS定时器(setTimeout setInterval)定时不准问题1

    在JavaScript中,setTimeout和setInterval是两个基本的定时器函数,用于实现延迟执行或循环执行某个函数。然而,这两个函数在执行时往往和我们设置的延迟时间有出入。本文将深入探讨JS定时器的执行机制,分析why ...

    JS闭包可被利用的常见场景

    由于闭包的特性,内部函数可以访问并操作外部函数(即`associateObjWithEvent`)的作用域,包括`obj`参数和`methodName`参数,这样就实现了将事件处理与特定对象实例的方法关联起来。 总结,闭包在JavaScript中的...

    Javascript的setTimeout()使用闭包特性时需要注意的问题

    setTimeout经常被用于延迟执行某个函数,用法为: 代码如下: setTimeout(function(){ … }, timeout);...在使用异步处理时,尤其是使用闭包特性时,要特别小心; 例如: 代码如下: for(var i = 0

    设置setTimeout函数,定时执行封装好的逻辑单元

    使用javascript方法settimeout()函数来定时跳转页面。

    js实现的倒计时定时自动关机源码

    在这个场景中,我们讨论的是使用JavaScript实现的倒计时定时自动关机功能。这个功能允许用户设置一个时间,当倒计时结束时,计算机将自动关闭。以下是关于这个主题的详细知识点: 1. **JavaScript事件循环**: ...

    jquery实现定时播报消息功能

    在本文中,我们将深入探讨如何使用jQuery来实现定时播报消息的功能。这个功能通常用于网站上,特别是电商或者服务型网站,以实时提醒用户有新的订单或者其他重要消息。通过以下步骤,您可以了解并实现这一功能: 1....

    教你一天玩转JavaScript(四)——使用JavaScript实现定时弹出广告定时隐藏广告

    本教程将深入探讨如何使用JavaScript来实现定时弹出广告以及定时隐藏广告的功能,这对于提升用户体验和网页互动性至关重要。 首先,我们需要理解JavaScript中的定时器概念。JavaScript提供了两个主要的定时器函数:...

    js使用setTimeout实现定时炸弹的方法

    在本例中,我们看到如何用 `setTimeout` 实现一个模拟的“定时炸弹”效果,即一个倒计时器,用户可以在倒计时结束前通过点击“拆除炸弹”按钮来停止倒计时。 首先,我们来看一下HTML部分。页面包含两个`div`元素,...

    利用setTimeout解决延时执行某操作

    setTimeout,javascript 延时执行函数,闭包处理 利用javascript闭包处理延时操作

    基于vb实现定时关机功能

    在VB(Visual Basic)编程环境中,我们可以利用操作系统提供的API(应用程序接口)来实现定时关机的功能。这个功能在日常生活中非常实用,例如在下载大文件或者进行系统维护时,可以设置一个特定的时间让电脑自动...

    闭包javascript.pdf

    2. **模块模式**:使用闭包可以实现模块化编程,通过返回一个对象来暴露公共方法,同时隐藏内部实现细节。 3. **事件处理**:在事件驱动的编程模型中,闭包使得我们可以在事件发生时访问到事件触发时的上下文状态。 ...

    JavaScript闭包

    JavaScript闭包是编程语言中的一个核心概念,...总之,JavaScript闭包是实现复杂功能的关键工具,理解和掌握闭包对于提高编程效率和代码质量具有重要意义。在实际开发中,灵活运用闭包可以写出更加高效、优雅的代码。

    js实现定时提交表单

    下面将详细介绍如何使用JavaScript实现定时提交表单的功能。 首先,我们需要理解表单(Form)的基本结构和事件。在HTML中,表单元素通常由`&lt;form&gt;`标签定义,包含各种输入控件如`&lt;input&gt;`、`&lt;textarea&gt;`等。表单...

    javascript闭包

    通过合理使用闭包,我们可以实现很多高级功能,如私有变量、延时执行等。然而,不正确的使用闭包也可能会导致内存泄漏等问题。因此,开发者在使用闭包时需要充分理解其工作原理,并注意避免潜在的问题。

Global site tag (gtag.js) - Google Analytics