今天在写验证码倒计时小demo时,用了如下代码:

window.setTimeout(count(num),1000);

这样直接使用将使count函数立即执行,并将返回值传递给setTimeout函数作为参数,其结果并不是真正需要的,所以会出现问题。

方法一

使用字符串形式可以达到想要的结果:

window.setTimeout("count(num)",1000);

这是我以前常用的方法。

但这种写法是将函数包在引号里,有点像字符串,不够直观

而且有些场合必须使用函数名,于是上网查阅了以下方法:

方法二

//倒计时函数
function count(_num){
...
}
//创建一个函数,用于返回一个无参数函数
function _count(_num){
return function(){
count(_num);
}
}
//这里30是实参
window.setTimeout(_count(30),1000);

这里定义了一个函数_count,用于接收一个参数,并返回一个不带参数的函数,在这个函数内部使用了外部函数的参数,从而对其调用,不需要使用参数。

在 window.setTimeout函数中,使用_count(30)来返回一个不带参数的函数,此时不需要用引号也实现了参数传递的功能。

其实还可以直接写成:

window.setTimeout(function(){count(30);},1000);

另外也有人通过修改setTimeout、setInterval来实现。即:

方法三

//功能函数
function count(_num){
...
}//*=============================================================
//* 功能: 修改 window.setInterval ,使之可以传递参数和对象参数
//* 方法: setInterval (回调函数,时间,参数1,,参数n) 参数可为对象:如数组等
//*============================================================= var __sto = setInterval;
window.setInterval = function(callback,timeout,param){
var args = Array.prototype.slice.call(arguments,2);
var _cb = function(){
callback.apply(null,args);
}
__sto(_cb,timeout);
}
//这里参数就变成了(函数名,间隔时间,原函数需要的实参)
window.setInterval(count,1000,30);

此方法实际将原函数的参数数组改造了一下,看懂还是比较容易,先摘抄过来以备不时之用。

关于setTimeout和setInterval的函数参数问题的更多相关文章

  1. 给定时器settimeout、setInterval调用传递参数

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

  2. setTimeOut(),和setInterVal()调用函数加不加括号!!!

    直接在ready中调用其他方法,会提示缺少对象的错误,解决方法如下: 方法1. 应用jQuery的扩展可以解决这个问题. $(document).ready(function(){ $.extend( ...

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

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

  4. 如何使用定时器settimeout、setInterval执行能传递参数的函数(转)

    来自: http://www.cnblogs.com/wkylin/archive/2012/09/07/2674911.html var userName="jack";//根据 ...

  5. 使用自定义setTimeout和setInterval使之可以传递参数和对象参数

    转载自http://www.jb51.net/article/17859.htm /****************************************************** //  ...

  6. javascript 函数返回值(return)、定时器(setTimeout、setInterval)

    一.函数的返回值:return 1.函数名+括号=return后面的值 <script> function fn1(){ return 100; } alert(fn1()); // 10 ...

  7. setInterval()和setTimeout()可以接收更多的参数

    setInterval()和setTimeout()可以接收更多的参数,那么这些参数是干什么用的呢?从第三个参数开始,依次用来表示第一个参数(回调函数)传入的参数,例如: setTimeout(fun ...

  8. setTimeout、setInterval被遗忘的第三个参数

    一.最近在看promise,惊奇的发现:原来 setTimeout不只有两个参数,我还能说什么呢?赶紧探探究竟. function multiply(input) { return new Promi ...

  9. 深入理解定时器系列第一篇——理解setTimeout和setInterval

    × 目录 [1]setTimeout [2]setInterval [3]运行机制[4]作用[5]应用 前面的话 很长时间以来,定时器一直是javascript动画的核心技术.但是,关于定时器,人们通 ...

随机推荐

  1. python--使用队列结构来模拟烫手山芋的游戏

    基本功,磨起来. # coding = utf-8 class Queue: def __init__(self): self.items = [] def is_empty(self): retur ...

  2. asp.net mvc自动压缩文件,并生成CDN引用

    很多站点都是用了静态文件分离.我推荐一种处理静态文件分离的方式. BundleExtensions.cs public static class BundleExtensions { public s ...

  3. mySql中SUBSTRING_INDEX函数用法

    SUBSTRING_INDEX(str,delim,count) 返回字符串 str 中在第 count 个出现的分隔符 delim 之前的子串.如果 count 是一个正数,返回从最后的(从左边开始 ...

  4. 通过java代码进行impala和kudu的对接

    对于impala而言,开发人员是可以通过JDBC连接impala的,有了JDBC,开发人员可以通过impala来间接操作kudu: maven导包: <!-- https://mvnreposi ...

  5. day3.python字符串格式化

    字符串格式化 注意:若在格式化输出中还需要再加%,需要两个%来代替 方法1:%控制格式化输出 例1: print("I'm %s. I'm %d year old" % ('Vam ...

  6. ELK 环境搭建2-Kibana

    一.安装前准备 1.节点 192.168.30.41 2.操作系统: Centos7.5 3.安装包 a.java8: jdk-8u181-linux-x64.tar.gz b.Kibana kiba ...

  7. window下面的守护进程,redis守护进程,RunHiddenConsole免费下载

    redis版本 在redis的目录下新建start_redis.bat 写入一下代码: D:/redis/RunHiddenConsole/RunHiddenConsole.exe redis-ser ...

  8. php json_encode转换中文乱码

    $arr = ["a"=>'范德萨似懂非懂']; echo json_encode($arr,JSON_UNESCAPED_UNICODE);

  9. AtCoder Grand Contest 1~10 做题小记

    原文链接https://www.cnblogs.com/zhouzhendong/p/AtCoder-Grand-Contest-from-1-to-10.html 考虑到博客内容较多,编辑不方便的情 ...

  10. 002 Hello Spring Security

    在前面已经搭建过环境框架,现在在demo模块下写一个简单的案例,让整个环境跑起来. 一:启动Demo项目 1.新建类 在这前,先建立包. 2.启动类程序 package com.cao; import ...