JavaScript中setTimeout和setInterval函数的传参及调用


Posted in Javascript onMarch 11, 2016

如何向 setTimeout 、 setInterval 传递参数
看如下代码:

var str = 'aaa'; 
var num = 2; 
function auto(num){ 
  alert(num); 
} 
setTimeout('auto(num)',4000);

这样写是可以正常工作的,但是如其说这是参数传递,还不如说是直接使用的全局变量。所以,这种写法是没有必要的,一般情况下更多的是用到传递局部变量作为参数。

把代码修改一下:

//var str = 'aaa'; 
var num = 2; 
function test(){ 
  var str = 'bbb'; 
  setTimeout('auto(str)',4000); 
} 
function auto(a){ 
  alert(a); 
} 
test();

这种写法会报错,如果把取消对 str 的全局声明的注释,就会输出 aaa,即函数依然是调用全局变量。
看下面的代码:

//var str = 'aaa'; 
var num = 2; 
function test(){ 
  var str = 'bbb'; 
  setTimeout('auto("str")',4000); 
} 
function auto(a){ 
  alert(a); 
} 
test();

注意上面的 str ,这样写会输出 “str”,也就是说定时器调用函数后,是把 str 直接当作了参数。这样传递的参数永远是字符串。这不是我们想要的结果。

要想传递除字符串意外的参数,可以使用闭包,看下面代码:

//var str = 'aaa'; 
var num = 2; 
function test(){ 
  var str = 'bbb'; 
  setTimeout(auto(str),4000); 
} 
function auto(str){ 
  return function(){ 
    alert(str); 
  } 
} 
test();

输出结果为 ‘bbb',如果给auto(str)加上引号同样会报错。
当然,这样写也是不错的:

var num = 2; 
function test(){ 
  var str = 'bbb'; 
  //setTimeout(auto(str),4000); 
  setTimeout(function(){alert(str)},4000); 
} 
function auto(str){ 
  return function(){ 
    alert(str); 
  } 
} 
test();

最后需要注意的是,字不使用闭包传递参数时,定时器调用的函数是要加引号的,不加引号,会报错。以上情形同样适合 setInterval();

setTimeout 、 setInterval 中的函数调用
有如下代码:

var num = 2; 
function auto(){ 
  alert(num); 
} 
setTimeout(auto(),4000);

在这段程序里,测试的时候立刻就可以看到弹出的警告框。也就是说按照以上方法引用函数,定时器是不起作用的。

同样,对于setInterval上面的写法也不能正常工作,程序只能弹出一次警告框,然后报错。
把定时器改为

setInterval('auto()',4000); 
setTimeout('auto()',4000);

程序可以正常工作。

当不使用auto()调用函数,只使用 auto会是什么样呢?

var str = 'aaa'; 
var num = 2; 
function auto(){ 
  alert(num); 
} 
//setInterval(auto,4000); 
setTimeout(auto,4000);

这样写程序都可以正常工作;

如果给auto加上引号

//setInterval('auto',4000); 
setTimeout('auto',4000);

都不能正常工作。

Javascript 相关文章推荐
JavaScript 开发中规范性的一点感想
Jun 23 Javascript
基于jQuery制作迷你背词汇工具
Jul 27 Javascript
js onload处理html页面加载之后的事件
Oct 30 Javascript
JavaScript 正则表达式中global模式的特性
Feb 25 Javascript
AngularJS基于ui-route实现深层路由的方法【路由嵌套】
Dec 14 Javascript
Bootstrap响应式表格详解
May 23 Javascript
gulp教程_从入门到项目中快速上手使用方法
Sep 14 Javascript
vue2.0使用swiper组件实现轮播的示例代码
Mar 03 Javascript
JS 实现缓存算法的示例(FIFO/LRU)
Mar 20 Javascript
微信小程序使用template标签实现五星评分功能
Nov 03 Javascript
详解ES6中的Map与Set集合
Mar 22 Javascript
node express使用HTML模板的方法示例
Aug 22 Javascript
原生JavaScript制作微博发布面板效果
Mar 11 #Javascript
JavaScript获取图片像素颜色并转换为box-shadow显示
Mar 11 #Javascript
详解Angularjs中的依赖注入
Mar 11 #Javascript
详解AngularJS过滤器的使用
Mar 11 #Javascript
javascript html5 canvas实现可拖动省份的中国地图
Mar 11 #Javascript
js仿百度登录页实现拖动窗口效果
Mar 11 #Javascript
基于jQuery日历插件制作日历
Mar 11 #Javascript
You might like
php 遍历数据表数据并列表横向排列的代码
2009/09/05 PHP
php中拷贝构造函数、赋值运算符重载
2012/07/25 PHP
PHP 异步执行方法,模拟多线程的应用分析
2013/06/03 PHP
使用PHPMailer实现邮件发送代码分享
2014/10/23 PHP
PHP 验证身份证是否合法的函数
2017/02/09 PHP
通过JAVASCRIPT读取ASP设定的COOKIE
2006/11/24 Javascript
关于JavaScript中var声明变量作用域的推断
2010/12/16 Javascript
javascript 内存回收机制理解
2011/01/17 Javascript
window.addEventListener来解决让一个js事件执行多个函数
2012/12/26 Javascript
JavaScript通过RegExp实现客户端验证处理程序
2013/05/07 Javascript
jquery操作下拉列表、文本框、复选框、单选框集合(收藏)
2014/01/08 Javascript
深入理解JavaScript系列(40):设计模式之组合模式详解
2015/03/04 Javascript
jQuery Ajax中的事件详细介绍
2015/04/16 Javascript
avalonjs实现仿微博的图片拖动特效
2015/05/06 Javascript
微信企业号开发之微信考勤Cookies的使用
2015/09/11 Javascript
KVM虚拟化技术之使用Qemu-kvm创建和管理虚拟机的方法
2016/10/05 Javascript
weex里Vuex state使用storage持久化详解
2017/09/09 Javascript
jQuery表单选择器用法详解
2019/08/22 jQuery
玩转python爬虫之cookie使用方法
2016/02/17 Python
Python程序员面试题 你必须提前准备!(答案及解析)
2018/01/23 Python
python用插值法绘制平滑曲线
2021/02/19 Python
python 获取等间隔的数组实例
2019/07/04 Python
numpy求平均值的维度设定的例子
2019/08/24 Python
Python变量、数据类型、数据类型转换相关函数用法实例详解
2020/01/09 Python
Avène雅漾美国官方网站:敏感肌肤护理专家
2016/10/24 全球购物
澳大利亚珍珠首饰购物网站:Vayo Pearls
2019/03/11 全球购物
银行会计财务工作个人的自我评价
2013/10/29 职场文书
大学生新闻专业个人自我评价
2013/11/12 职场文书
学生周末回家住宿长期请假条
2014/02/15 职场文书
承诺书样本
2014/08/30 职场文书
爱晚亭导游词
2015/02/09 职场文书
春节慰问简报
2015/07/21 职场文书
放假通知怎么写
2015/08/18 职场文书
JS数组的常用方法整理
2021/03/31 Javascript
python中pandas对多列进行分组统计的实现
2021/06/18 Python
实现一个简单得数据响应系统
2021/11/11 Javascript