如何为 setTimeout() 方法传参

现有如下JavaScript代码:

function printApple(apple){

  console.log(apple, "is a kind of healthy fruit");

}

var apple = "apple";

setTimeout("printApple(apple)", 5000);

则在执行setTimeout时,会报 apple is not defined,那么应该如何传参数呢?

1、 匿名函数

setTimeout(function(){

  console.log(apple, "is a kind of healthy fruit");

}, 5000);

2、Function.prototype.bind()

setTimeout(printApple.bind(null, apple), 5000);

3、第三个参数作为 setTimeout() 内部函数的参数,其实setTimeout()可以接受多个参数:setTimeout(yourFunctionReference, 5000, param1, param2, paramN);

var apple = "apple";

setTimeout(printApple, 5000, apple);

由于IE10以前的版本,不支持为setTimeout()和setInterval()方法传递第三个参数,所以在IE10以前的版本使用时,要添加以下代码:

if (document.all && !window.setTimeout.isPolyfill) {
  var __nativeST__ = window.setTimeout;
  window.setTimeout = function (vCallback, nDelay /*, argumentToPass1, argumentToPass2, etc. */) {
    var aArgs = Array.prototype.slice.call(arguments, 2);
    return __nativeST__(vCallback instanceof Function ? function () {
      vCallback.apply(null, aArgs);
    } : vCallback, nDelay);
  };
  window.setTimeout.isPolyfill = true;
}

if (document.all && !window.setInterval.isPolyfill) {
  var __nativeSI__ = window.setInterval;
  window.setInterval = function (vCallback, nDelay /*, argumentToPass1, argumentToPass2, etc. */) {
    var aArgs = Array.prototype.slice.call(arguments, 2);
    return __nativeSI__(vCallback instanceof Function ? function () {
      vCallback.apply(null, aArgs);
    } : vCallback, nDelay);
  };
  window.setInterval.isPolyfill = true;
}

Any anonymous function will change "this" to point to window, so you will lose your object reference.

 
时间: 2024-10-17 20:55:42

如何为 setTimeout() 方法传参的相关文章

EasyUI queryParams属性 在请求远程数据同时给action方法传参

http://www.cnblogs.com/iack/p/3530500.html?utm_source=tuicool EasyUI queryParams属性 在请求远程数据同时给action方法传参 属性名 属性值类型 描述 默认值 queryParams object 在请求远程数据的时候发送额外的参数. 代码示例: $('#dg').datagrid({ queryParams: { name: 'easyui', subject: 'datagrid' } }); {} Actio

方法传参

关于方法传参: (参数也叫 参变量 ,它是专属于方法体的局部变量!) 首先我想先说一个结论:基本数据类型作形参时,实参向形参传递的是值:引用数据类型作形参时传递的是 对象.(其实传递都是值,具体可参考http://www.cnblogs.com/wsw-blog/articles/my-bolgs-898558572.html)    我们知道在调用带参方法时需要按照该方法的形参变量列表将类型.顺序一 一对应的实参变量的值传递过去. 这就是方法的参数传递! 当基本数据类型作为形参时,无论形参变量

javascript 字符串方法传参

javascript 字符串方法传参由于嵌套的单引号,双引号过多.有点混乱.. 正确方法如下: '   <td align="left"><input type="button"  id="btnBack" value="确定" class="bigbt"  onclick="continuePassword(\''+cardnumber+'\')"/></

MyBatis dao层 方法传参

MyBatis dao层 方法传参有三种方法. 1. 以下标的方法获取参数. <update id="insertSuccessKilled">       INSERT ignore INTO success_killed(seckill_id,user_phone,state)VALUES (#{0},#{1},1) </update> 2. 以map作为dao方法中的参数,通过使用key和类型来获取参数. <select id=" sele

cocos2dx 菜单按钮回调方法传参 tag传参

.h文件 void menuCallBack(CCObject* pSender); .cpp CCMenuItemSprite* item = CCMenuItemSprite::create( menuCB1, menuCB2, this, menu_selector(helloworld::menuCallBack)); item->setTag(m); 回调方法 void helloworld::menuCallBack(CCObject* pSender) { CCNode* node

wx.request中POST方法传参问题,用到JSON.stringify()

前面用到了get方法传参,现在post也需要传参传输内容进去,下面我来一步步研究: 遇到的问题: 传参进去后反馈参数为空,没有报错.错误代码如下: wx.request({ url: '某地址', method: "post", data: { msg: { "phone": "某电话", "content": this.data.text, "date":this.data.time } }, heade

配置对象方法传参

我们见到的一般常规的函数传参是下面这样的: function fn ( a,b ) { console.log( a,b ); } //常规传参方式 fn( 1,2 ); //12 但是当函数需要很多个参数,而且参数的位置会影响到结果的时候常规的函数传参方式就显得捉襟见肘,例如 function fn ( a,b,c,d,e,f,g ){ console.log( a,b,c,d,e,f,g ); } 此时如果再使用原来那种传参方式出错的概率会大大增加 此时我们可以尝试 配置对象 传参,可以把上

Java方法传参

1.创建students类-----//主要构造对象 http://vipnoon.blog.51cto.com/7589908/1792786 2.创建calc类---------//主要构造方法 public class calc { public void calc1(int num){  num = num + 1; } public void calc2(students stu){ stu.setAge(stu.getAge()+1); } } 3.创建calcDemo类-----/

微信小程序的页面跳转==编程式导航传参 和 标签的方法传参

小程序导航传参接收传递过来的参数 在onload中 实例 原文地址:https://www.cnblogs.com/xiaoxiaoxun/p/11414768.html