刚刚困扰许久的问题

用for循环绑定事件执行时总是得到循环的最后一条参数,代码如下

var param = {
    "0":{
        "id":"swipe-top",
        "scope":"0",
        "type":"Swiper",
        "content":[]
    },
    "1":{
        "id":"act-body",
        "scope":"1",
        "type":"Normal",
        "content":[]
    },

}

for(var scope in param){

$("#"+param[scope].id).click(funciton(){

show(param[scope]);

});

}

function show(parm){

console.log(parm);

}

以上代码执行完绑定的点击事件,无论点击id="swipe-top"或是id="act-body"元素,执行的函数show中得到的参数parm都是最后一个scope为1的参数

想了很久,打了断点改了参数试了几遍,没想到问题所在,后来百度了一下,发现是JS闭包的原因

以前只是知道闭包这个词,总觉得是很重要的一个知识点,但是只是在书本上看到过,也并不清楚它的概念以及原理,工作中并未涉及到

如今遇到了,也算对闭包有了一点实质性的理解了

目前我了解到闭包的一点如以上代码中的for循环绑定事件

我的理解是(并不一定正确),点击事件click中的function函数在绑定时并不执行,而函数中的show函数此时并没有得到实际参数,所以当循环结束,点击事件触发时function执行,此时show函数得到的参数永远是for循环最后一次获取的值param[1]

针对以上问题最终的解决方法如下

for(var scope in param){

$("#"+param[scope].id).click(

(function(parm){

return function(){
                show(parm);
    }

})(param[scope])

);

}

click绑定一个立即执行的函数,用当前循环的值param[scope]作为参数,该函数的内容为返回另一个函数,这个返回的函数为click点击事件的最终执行函数,此时show获取的参数parm即是当前循环的值param[i],通过这种方式包装起来的函数就是闭包,有不对的地方望大佬指出。

emmmmmm.....其实之前辛辛苦苦写了一大堆的,发布之后莫名其妙就没了,只留了一半的草稿,CSDN真坑!

小白成长之路_今天学到的(2018.4.16)相关推荐

  1. 芯片工程师成长之路_一个FPGA工程师的成长之路

    最近逻辑组任务较多,人力不足,因此招了一些新员工.最近一段时间,也面试了很多人,各个行业和公司的都有,形形色色的人面试多了,也有一些感触,另外,年近而立,也需要总结一下.在此记录下来,与君共勉. 关于 ...

  2. 技术小白成长之路 - 谷歌云端 GCP Cloud Engineering - 第一篇 - 核心架构 Core Infrastructure

    谷歌云端 GCP Cloud Engineering Certificate - 第一篇 - 核心架构 Core Infrastructure 谷歌云端平台GCP简介 1. 谷歌云端平台GCP资源层次 ...

  3. 芯片工程师成长之路_实施工程师的成长之路 | 来自咸职厚溥17级学姐的分享

    就业 故事 大家好,我是咸阳职业技术学院高信管1705班于帆,很荣幸和大家分享我的工作经历,我将从以下两点展开我的分享: 工作经历: 截止现在我有两段工作经验,第一段于2019年11月18日在上海孚盟 ...

  4. Python成长之路_装饰器

    一.初入装饰器 1.首先呢我们有这么一段代码,这段代码假设是N个业务部门的函数 1 def f1(aaa): 2 print('我是F1业务') 3 if aaa == 'f1': 4 return ...

  5. PSI成长之路_配置并成功运行

    PSI是一款基于SaaS模式(Software as a Service软件即服务)的企业管理软件.PSI以商贸企业的核心业务:采购.销售.库存(进销存)为切入点,最终目标是行业化的ERP解决方案. ...

  6. 小白成长之路_LeetCode刷题记录

    题目: 给你一个长度为 n 的整数数组,请你判断在 最多 改变 1 个元素的情况下,该数组能否变成一个非递减数列. 思考: 我们是这样定义一个非递减数列的: 对于数组中所有的 i (0 <= i ...

  7. python大神的成长之路_我的Python成长之路

    Linux命令-文件.磁盘管理-01 1.文件管理 <1>查看文件信息:ls ls是英文单词list的简写,其功能为列出目录的内容,是用户最常用的命令之一,它类似于DOS下的dir命令. ...

  8. 小白成长之路-linux定时任务cron和crontab

    Linux定时任务 一.为啥要学习定时任务 在我们现实生活中处处可以用到定时任务. 如: 亲爱的,2020年4月1号会上映一部动画片电影我们去看看啊. 明天上午老师要看论文了 我作业还没写,明天早上上 ...

  9. 如何成为一名架构师,架构师成长之路

    技术人人都是xx 父文章 人人都是面试_个人渣记录仅为自己搜索用的博客-CSDN博客 我的成长之路_个人渣记录仅为自己搜索用的博客-CSDN博客 相关文章 架构师好书推荐_个人渣记录仅为自己搜索用的博 ...

  10. 架构师之中台思维_系统发展之路_结果和抽象之间平衡的艺术

    父文章 如何成为一名架构师,架构师成长之路_golang架构师成长之路_个人渣记录仅为自己搜索用的博客-CSDN博客 中台和平台的区别. 平台是构建领域能力. 中台是上游仅传一个bizId+ oper ...

最新文章

  1. Ucenter社区服务搭建
  2. 游戏编程中的数学——随机数字生成(RNG)的黑暗秘密
  3. 变化的和不变的-让自己慢下来(49)
  4. 强制Tomcat通过SLF4J / Logback登录
  5. git上传大于100M的文件
  6. SQLi LABS Less-35
  7. 一人身兼多个项目时的“课程表”工作模式实践
  8. IDEA Maven Mybatis generator 自动生成代码
  9. Windows无法安装到磁盘磁盘具有MBR分区表的解决
  10. 软件工程导论01-概论
  11. 第48次《中国互联网络发展状况统计报告》发布--报告解读
  12. 注册界面模板HTML+CSS
  13. 图像处理农业应用sci_新增3本SCI期刊,JCR二区、SCI, EI双收 录,影响因子多年增长...
  14. 深入学习 esp8266 wifimanager源码解析(打造专属自己的web配网)(最全的wifimanager介绍))
  15. oracle关系数据库概述
  16. 技术管理那些事(二)“人剑合一”的团队
  17. 子网掩码的作用和用法
  18. 途家、木鸟、美团……民宿暑期战事将起
  19. EM78系列单片机的开发工具及编程器
  20. 03Roberts算子

热门文章

  1. 大湾区国际创客峰会暨MFSZ2021重磅回归!
  2. 比较有意思的.NET反调—《.NET在蹉跎中一路前行》
  3. 【数学】从鸡兔同笼谈数学思维
  4. 软件架构设计-大型网站技术架构于业务架构融合之道——部分知识点总结【未完】
  5. 在手机与计算机之间进行文件传输的方式,电脑和手机传输文件方法_电脑和手机如何传文件-win7之家...
  6. arduino/Mixly TEMT6000环境光传感器
  7. 关于 PHP 的框架 phalcon 学习(一) url 路由过程。
  8. linux给目录分配空间,Linux 分配/home的磁盘空间给根目录
  9. 《连线》长文特写李飞飞:已识乾坤大,犹怜草木青
  10. Gazebo模型下载