小白成长之路_今天学到的(2018.4.16)
刚刚困扰许久的问题
用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)相关推荐
- 芯片工程师成长之路_一个FPGA工程师的成长之路
最近逻辑组任务较多,人力不足,因此招了一些新员工.最近一段时间,也面试了很多人,各个行业和公司的都有,形形色色的人面试多了,也有一些感触,另外,年近而立,也需要总结一下.在此记录下来,与君共勉. 关于 ...
- 技术小白成长之路 - 谷歌云端 GCP Cloud Engineering - 第一篇 - 核心架构 Core Infrastructure
谷歌云端 GCP Cloud Engineering Certificate - 第一篇 - 核心架构 Core Infrastructure 谷歌云端平台GCP简介 1. 谷歌云端平台GCP资源层次 ...
- 芯片工程师成长之路_实施工程师的成长之路 | 来自咸职厚溥17级学姐的分享
就业 故事 大家好,我是咸阳职业技术学院高信管1705班于帆,很荣幸和大家分享我的工作经历,我将从以下两点展开我的分享: 工作经历: 截止现在我有两段工作经验,第一段于2019年11月18日在上海孚盟 ...
- Python成长之路_装饰器
一.初入装饰器 1.首先呢我们有这么一段代码,这段代码假设是N个业务部门的函数 1 def f1(aaa): 2 print('我是F1业务') 3 if aaa == 'f1': 4 return ...
- PSI成长之路_配置并成功运行
PSI是一款基于SaaS模式(Software as a Service软件即服务)的企业管理软件.PSI以商贸企业的核心业务:采购.销售.库存(进销存)为切入点,最终目标是行业化的ERP解决方案. ...
- 小白成长之路_LeetCode刷题记录
题目: 给你一个长度为 n 的整数数组,请你判断在 最多 改变 1 个元素的情况下,该数组能否变成一个非递减数列. 思考: 我们是这样定义一个非递减数列的: 对于数组中所有的 i (0 <= i ...
- python大神的成长之路_我的Python成长之路
Linux命令-文件.磁盘管理-01 1.文件管理 <1>查看文件信息:ls ls是英文单词list的简写,其功能为列出目录的内容,是用户最常用的命令之一,它类似于DOS下的dir命令. ...
- 小白成长之路-linux定时任务cron和crontab
Linux定时任务 一.为啥要学习定时任务 在我们现实生活中处处可以用到定时任务. 如: 亲爱的,2020年4月1号会上映一部动画片电影我们去看看啊. 明天上午老师要看论文了 我作业还没写,明天早上上 ...
- 如何成为一名架构师,架构师成长之路
技术人人都是xx 父文章 人人都是面试_个人渣记录仅为自己搜索用的博客-CSDN博客 我的成长之路_个人渣记录仅为自己搜索用的博客-CSDN博客 相关文章 架构师好书推荐_个人渣记录仅为自己搜索用的博 ...
- 架构师之中台思维_系统发展之路_结果和抽象之间平衡的艺术
父文章 如何成为一名架构师,架构师成长之路_golang架构师成长之路_个人渣记录仅为自己搜索用的博客-CSDN博客 中台和平台的区别. 平台是构建领域能力. 中台是上游仅传一个bizId+ oper ...
最新文章
- Ucenter社区服务搭建
- 游戏编程中的数学——随机数字生成(RNG)的黑暗秘密
- 变化的和不变的-让自己慢下来(49)
- 强制Tomcat通过SLF4J / Logback登录
- git上传大于100M的文件
- SQLi LABS Less-35
- 一人身兼多个项目时的“课程表”工作模式实践
- IDEA Maven Mybatis generator 自动生成代码
- Windows无法安装到磁盘磁盘具有MBR分区表的解决
- 软件工程导论01-概论
- 第48次《中国互联网络发展状况统计报告》发布--报告解读
- 注册界面模板HTML+CSS
- 图像处理农业应用sci_新增3本SCI期刊,JCR二区、SCI, EI双收 录,影响因子多年增长...
- 深入学习 esp8266 wifimanager源码解析(打造专属自己的web配网)(最全的wifimanager介绍))
- oracle关系数据库概述
- 技术管理那些事(二)“人剑合一”的团队
- 子网掩码的作用和用法
- 途家、木鸟、美团……民宿暑期战事将起
- EM78系列单片机的开发工具及编程器
- 03Roberts算子
热门文章
- 大湾区国际创客峰会暨MFSZ2021重磅回归!
- 比较有意思的.NET反调—《.NET在蹉跎中一路前行》
- 【数学】从鸡兔同笼谈数学思维
- 软件架构设计-大型网站技术架构于业务架构融合之道——部分知识点总结【未完】
- 在手机与计算机之间进行文件传输的方式,电脑和手机传输文件方法_电脑和手机如何传文件-win7之家...
- arduino/Mixly TEMT6000环境光传感器
- 关于 PHP 的框架 phalcon 学习(一) url 路由过程。
- linux给目录分配空间,Linux 分配/home的磁盘空间给根目录
- 《连线》长文特写李飞飞:已识乾坤大,犹怜草木青
- Gazebo模型下载