无论是window.setTimeout还是window.setInterval,在使用函数名作为调用句柄时都不能带参数,而在 
许多场合必须要带参数,这就需要想方法解决。例如对于函数hello(_name),它用于针对用户名显示欢 
迎信息:

var userName="jack";

//根据用户名显示欢迎信息 
   function hello(_name){ 
             alert("hello,"+_name); 
     } 
这时,如果企图使用以下语句来使hello函数延迟3秒执行是不可行的:

window.setTimeout(hello(userName),3000); 
将使hello函数立即执行,并将返回值作为调用句柄传递给setTimeout函数,其结果并不是程序需要的 
。而使用字符串形式可以达到想要的结果: 
 
window.setTimeout("hello(userName)",3000);

这里的字符串是一段JavaScript代码,其中的userName表示的是变量。但这种写法不够直观,而且有些 
场合必须使用函数名,并且所传的变量必须为全局变量,不能传递局变量 
下面用一个小技巧来实现带参数函数的调用

<script language="JavaScript" type="text/javascript"> 
<!-- 
var userName="jack"; 
//根据用户名显示欢迎信息 
function hello(_name){ 
       alert("hello,"+_name); 

//创建一个函数,用于返回一个无参数函数 
function _hello(_name){ 
       return function(){ 
             hello(_name); 
       } 

window.setTimeout(_hello(userName),3000); 
//--> 
</script> 
此技巧,不管是全局变量,还是局部变量都可以传递 
这里定义了一个函数_hello,用于接收一个参数,并返回一个不带参数的函数,在这个函数内部使用了 
外部函数的参数,从而对其调用,不需要使用参数。在 window.setTimeout函数中,使用_hello 
(userName)来返回一个不带参数的11:01 2007-1-5函数句柄,从而实现了参数传递的功能。

来自:http://www.cnblogs.com/chinahnzl/articles/612147.html

给定时器settimeout、setInterval调用传递参数的更多相关文章

  1. 定时器(setTimeout/setInterval)调用带参函数失效解决方法

    也许你曾碰到过这样的问题,不管是setInterval()还是setTimeout(),当code参数里放一个带参函数时,定时器都会失效,看下面这个例子: function test(str){ al ...

  2. js给定时器调用传递参数

    给定时器调用传递参数 无论是window.setTimeout 还是window.setInterval,在使用函数名作为调用句柄时都不 能带参数,而在许多场合必需要带参数,这就需要想方法解决.例如对 ...

  3. Javascript 定时器调用传递参数的方法

    文章来源:  https://m.jb51.net/article/20880.htm 备注:先记下,以后整理: Javascript 定时器调用传递参数的方法,需要的朋友可以参考下. 无论是wind ...

  4. 定时器 setTimeout()超时调用和 setInterval()间歇调用

    JavaScript是单线程语言,但它允许通过设置定时器,也就是设置超时值和间歇时间来调度代码在特定的时刻执行.前者是在指定的时间过后执行代码,而后者则是每隔指定的时间就执行一次代码. 超时调用需要使 ...

  5. 【知识】定时器setTimeout/setInterval执行时this指针指向问题

    [问题描述] setTimetout/setInterval中this指针指向window,以下是一个小demo: var demoChange = { key: true, changeFun() ...

  6. 清除定时器 和 vue 中遇到的定时器setTimeout & setInterval问题

    2019-03更新 找到了更简单的方法,以setinterval为例,各位自行参考 mounted() { const that = this const timer = setInterval(fu ...

  7. Juqery 定时器 settimeout setInterval

    setTimeout 只执行一次 setTimeout(loading_tree,2000); function loading_tree(){ $('body').mLoading("hi ...

  8. 使用匿名函数给setInterval()传递参数

    在使用JScript的时候,我们有时需要间隔的执行一个方法,比如用来产生网页UI动画特效啥的.这是我们常常会使用方法setInterval或setTimeout,但是由于这两个方法是由脚本宿主模拟出来 ...

  9. 使用定时器settimeout、setInterval执行能传递参数的函数

    无论是window.setTimeout还是window.setInterval,在使用函数名作为调用句柄时都不能带参数,而在许多场合必须要带参数,这就需要想方法解决.经网上查询后整理如下: 例如对于 ...

随机推荐

  1. Scala的函数,高阶函数,隐式转换

    1.介绍 2.函数值复制给变量 3.案例 在前面的博客中,可以看到这个案例,关于函数的讲解的位置,缺省. 4.简单的匿名函数 5.将函数做为参数传递给另一个函数 6.函数作为输出值 7.类型推断 8. ...

  2. JMeter学习-030-JMeter性能测试常用之事务控制器实例

    通常进行性能测试时,我们一般仅考虑主要的数据返回,不考虑页面渲染所需要的数据(例如:css.js.图片等).但当我们需要衡量打开一个页面(页面渲染完成)的性能时,我们就需要考虑完成页面渲染所需要的图片 ...

  3. ionic实现点击popup区域外部分来关闭popup

    var htmlEl = angular.element(document.querySelector('html')); htmlEl.on('click', function (event) { ...

  4. 实时控制软件设计第一周作业-汽车ABS软件系统案例分析

    汽车ABS软件系统案例分析 ABS 通过控制作用于车轮制动分泵上的制动管路压力,使汽车在紧急刹车时车轮不会抱死,这样就能使汽车在紧急制动时仍能保持较好的方向稳定性. ABS系统一般是在普通制动系统基础 ...

  5. stream数据流

    首先必须先要了解Buffer,Buffer是js和c++的结合体,类数组,通常与Stream一起用: 1. (1).Buffer是个类,因此可以构建成对象 (2).buf具有数组的性质 字符串转换成二 ...

  6. Warning C4819

    VC工程里有个文件,只有文件里写了汉字,就报警告C4819 Warning C4819:The file contains a character that can ot be represented ...

  7. Win7+Docker(boo2docker)搭建php开发环境简略

    之所以称谓简略 是不准备配图的意思 嘿嘿! 步骤1: 到docker官网下载Docker Toolbox,并完全安装 步骤2: 安装完成后,运行在桌面新生成的快捷方式:Docker Quickstar ...

  8. OpenCV Haartraining

    opencv_haartraining.exe -data xml -vec pos.vec -bg neg/neg.txt -w 20 -h 20 -mem 144 opencv_haartrain ...

  9. poj 1266 Cover an Arc.

    http://poj.org/problem?id=1266 Cover an Arc. Time Limit: 1000MS   Memory Limit: 10000K Total Submiss ...

  10. 什么是Cookie对象,Session对象,Application对象。

    Cookie是: 一个由网页服务器放在您硬盘上的非常小的文本文件. 它本质上就像您的身份证明一样,并且不能像代码那样被执行或被用来散布病毒.它只能被您使用并且只能由提供的服务器读取. 使用Cookie ...