这里所谓“保值”,是指在setTimeout中指定的时间后,执行指定的方法所用到的“参数”值,跟执行setTimeout时该“参数”值一样。是不是有点懵?看如下例子:

=========================================

for(var i=0;i<10;i++)
{
  setTimeout(function(){alert(i);},i*1000);
}

期望:依次弹出0~9

实际:总是弹出10  原因:在若干时间后,所使用到的 i的值已经是 i最新的值,也就是在for中i的值瞬时加到的10。导致”传参”失真!

=========

兼容性保值方案

=========

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

  (function(k){

  setTimeout(function(){alert(k);},k*1000);

  })(i);
}

效果:依次弹出0~9 原理:将i当时的值复制到匿名函数里,在其参数中”保值”。

=========================================

其实,我们上面用到的setTimeout是 setTimeout(code, delay) 这个版本。

其实还有另外一个版本:setTimeout(func, delay, [param1, param2, ...]),后面的param们就是调用func时给它传的参数。它可以很干净地解决“传参”失真的问题:

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

  setTimeout(function(k){alert(k);},i*1000,i);

}

但是很遗憾!它不具有浏览器兼容性!在IE8及其以下是不支持的。可参考:http://www.cnblogs.com/cuixiping/archive/2010/01/24/1655033.html

兼容性js中setTimeout 传参“保值”方案的更多相关文章

  1. Vue.js中组件传参的方法 - 基于webpack模板

    在Vuejs中, 组件之间的传参是今天第一次接触, 之前写的组件互相之间都是独立的, 弗敢专也, 必以分人 环境: node.js npm vue-cli 以上安装请自行百度 一.项目创建 $ vue ...

  2. js中函数传参的情况

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...

  3. js关于setTimeout传参

    setTimeout函数有两个参数,都是必须的,一个是要执行的函数,一个是延时的时间 第一个参数: 要执行的函数,一般来说是可以执行的,但是这里遇到一个问题,就是如果变量是个数组的话, 如果数组为nu ...

  4. [js]js中函数传参判断

    1,通过|| function fun(x,y){ x=x||0; y=y||1; alert(x+y); } fun(); 2.通过undefined对比 function fun(x,y){ if ...

  5. Vue-CLI项目中路由传参

    Vue-CLI项目中路由传参 一.标签传参方式:<router-link></router-link> 第一种 router.js { path: '/course/detai ...

  6. Vue-cli中axios传参的方式以及后端取的方式

    0917自我总结 Vue-cli中axios传参的方式以及后端取的方式 一.传参 params是添加到url的请求字符串中的,用于get请求. data是添加到请求体(body)中的, 用于post请 ...

  7. js中settimeout方法加参数

    js中settimeout方法加参数的使用. 简单使用看w3school  里面没有参数调用,  例子: <script type="text/javascript"> ...

  8. js中setTimeout/setInterval定时器用法示例

    js中setTimeout(定时执行一次)和setInterval(间隔循环执行)用法介绍. setTimeout:在指定的毫秒数后调用指定的代码段或函数:setTimeout示例代码 functio ...

  9. Python中的传参是传值还是传址?

    传值:在C++中,传值就是把一个参数的值给这个函数,其中的更改不会影响原来的值. 传址:即传引用,直接把这个参数的内存地址传递进去,直接去这个内存地址上进行修改. 但是这些在Python中都没有,Py ...

随机推荐

  1. 基于KNN的newsgroup 18828文本分类器的Python实现

    还是同前一篇作为学习入门. 1. KNN算法描述: step1: 文本向量化表示,计算特征词的TF-IDF值 step2: 新文本到达后,根据特征词确定文本的向量 step3 : 在训练文本集中选出与 ...

  2. Xen启动过程分析(还是分享过来吧,找了好长时间)

    XEN启动过程     ‍Xen Hypervisor运行在Ring0,在启动过程中,Xen首先被引导:系统由Grub启动,遵循Multiboot引导规范:然后Linux内核做为module也被引导入 ...

  3. BZOJ 3156 防御准备

    也是斜率优化....推下式子就好了. #include<iostream> #include<cstdio> #include<cstring> #include& ...

  4. Thinkphp_View(1)循环输出

    循环输出主要是使用volist和foreach标签输出. VOLIST volist标签通常用于查询数据集(select方法)的结果输出,通常模型的select方法返回的结果是一个二维数组,可以直接使 ...

  5. php性能优化实用技巧:

    以下是五个优化技巧,熟练掌握后对于开发还是很有帮助的. 1. 对字符串使用单引号 PHP 引擎允许使用单引号和双引号来封装字符串变量,但是这个是有很大的差别的!使用双引号的字符串告诉 PHP 引擎首先 ...

  6. 在ubuntu14.04 64位虚拟机中安装mysql

    因为在win10 系统上手贱的将mysql卸载掉了之后有个插件一直无法正常删除导致只能将mysql装到ubuntu虚拟机上, 宝宝心里都是累啊,所以记录下来自己的安装过程2333 命令行操作: &qu ...

  7. 配置apache apache服务器如何配置多站点

    http://jingyan.baidu.com/article/5225f26b07605be6fa090890.html 让Apache在启动时能加载虚拟主机模块. 打开Apache安装目录下co ...

  8. background-origin和background-clip的区别

    background-origin和background-clip是CSS3内新增加的属性,其实一个是对背景图片的放置,另一个是对背景图片的剪裁. background-origin和backgrou ...

  9. (转)iOS安全 对本地文件的保护

    开篇先扯几句题外话,许多朋友都问我怎么不写防啊,我确实有点犹豫.hackers总是想象如果自己是开发者会怎么写,然后才能找到入手点.同理,开发者们也要想象自己是hackers会怎么做,才能采取相应的防 ...

  10. rtmp转m3u8

    不是所有的地址改成这样都能播 需要自己测试 先说一下rtmp的其中rtmp的常见的差不多是3种 1.一种是wowza服务器的 比如这个地址rtmp://116.55.245.135:8096/live ...