JS中把函数作为另一函数的参数传递方法(总结)


Posted in Javascript onJune 28, 2017

今天在给元素注册事件的时候,使用addEventListener遇到了一个问题,这个好像之前也遇到过,觉得有必要总结一下,就是js函数作为参数引发的问题。首先看以下代码,觉得下面代码有问题吗?是否能达到点击id3对应的元素后,弹出id3呢?

例1

var obj3=document.getElementById('id3'); 
obj3.addEventListener('click',curClick('id1'),true); 
function curClick(id){ 
    alert(id); 
}

答案是否定,不能达到我想要的效果,因为这行代码在页面加载完成时候,就会弹出id3。当我单击id3对应的元素时候,页面没有任何反应。

于是我将代码改为如下两种情况:

例2

var obj3=document.getElementById('id3'); 
  obj3.addEventListener('click',function(e){curClick('id3');stopPropagation(e)},true); 
 
  function curClick(id){ 
    alert(id); 
  }

例3

var obj1=document.getElementById('id1');  
obj1.addEventListener('click',curClick1,true); 
function curClick1(){ 
 alert('okey'); 
}

这次执行正常了,这是为什么呢?

因为在JS世界里curClick('id3')就是直接调用curClick('id3'),而非将其作为一个参数来传递,如果要将其作为一个参数来传递,如果不需要传递参数,直接传递函数名就可,如果需要传递参数,有两种解决办法

方法一:借助匿名函数,将要传递的函数,放在匿名函数中,将匿名函数作为参数如例2

eg:将function(){myfunction(val1,val2,......);}作为参数传递。

第二:改写需要传递函数

function curClick1(val){ 
<span style="white-space:pre">  </span>return function(){ 
    alert(val); 
  }; 
}

以上这篇JS中把函数作为另一函数的参数传递方法(总结)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript中的throttle和debounce浅析
Jun 06 Javascript
node.js 开发指南 ? Node.js 连接 MySQL 并进行数据库操作
Jul 29 Javascript
JS的location.href跳出框架打开新页面的方法
Sep 04 Javascript
javascript中html字符串转化为jquery dom对象的方法
Aug 27 Javascript
jQuery实现右侧显示可向左滑动展示的深色QQ客服效果代码
Oct 23 Javascript
jquery ztree实现模糊搜索功能
Feb 25 Javascript
javascript 动态样式添加的简单实现
Oct 11 Javascript
Vue2.0 组件传值通讯的示例代码
Aug 01 Javascript
laypage+SpringMVC实现后端分页
Jul 27 Javascript
jquery实现的分页显示功能示例
Aug 23 jQuery
vue+vant实现购物车全选和反选功能
Nov 17 Vue.js
Vue中引入svg图标的两种方式
Jan 14 Vue.js
js+html制作简单日历的方法
Jun 27 #Javascript
ionic环境配置及问题详解
Jun 27 #Javascript
微信小程序 密码输入(源码下载)
Jun 27 #Javascript
Javascript实现base64的加密解密方法示例
Jun 27 #Javascript
微信小程序 空白页重定向解决办法
Jun 27 #Javascript
ionic 自定义弹框效果
Jun 27 #Javascript
js脚本编写简单刷票投票系统
Jun 27 #Javascript
You might like
thinkphp实现面包屑导航(当前位置)例子分享
2014/05/10 PHP
js Event对象的5种坐标
2011/09/12 Javascript
浅谈EasyUI中编辑treegrid的方法
2015/03/01 Javascript
自定义刻度jQuery进度条及插件
2015/09/02 Javascript
javascript性能优化之事件委托实例详解
2015/12/12 Javascript
浅谈jquery点击label触发2次的问题
2016/06/12 Javascript
详解百度百科目录导航树小插件
2017/01/08 Javascript
js获取隐藏元素的宽高
2017/02/24 Javascript
关于TypeScript中import JSON的正确姿势详解
2017/07/25 Javascript
微信小程序上传图片实例
2018/05/28 Javascript
angular6根据environments配置文件更改开发所需要的环境的方法
2019/03/06 Javascript
利用angular自动编译andriod APK的绕坑经历分享
2019/03/08 Javascript
详解Node.js异步处理的各种写法
2019/06/09 Javascript
elementUi vue el-radio 监听选中变化的实例代码
2019/06/28 Javascript
构建大型 Vue.js 项目的10条建议(小结)
2019/11/14 Javascript
[01:22:29]真视界:2019年国际邀请赛总决赛
2020/01/29 DOTA
在Python中用get()方法获取字典键值的教程
2015/05/21 Python
python中的代码编码格式转换问题
2015/06/10 Python
Python编程中time模块的一些关键用法解析
2016/01/19 Python
python使用Tesseract库识别验证
2018/03/21 Python
python 获取文件下所有文件或目录os.walk()的实例
2018/04/23 Python
Python3爬虫全国地址信息
2019/01/05 Python
WxPython实现无边框界面
2019/11/18 Python
Python解析json代码实例解析
2019/11/25 Python
Python continue语句实例用法
2020/02/06 Python
python文件和文件夹复制函数
2020/02/07 Python
浅谈PyTorch中in-place operation的含义
2020/06/27 Python
美国专业汽车音响和移动电子产品零售商:Car Toys
2019/05/13 全球购物
Nasty Gal英国:美国女性服饰销售网站
2021/03/02 全球购物
双语教学实施方案
2014/03/23 职场文书
贺卡寄语大全
2014/04/11 职场文书
党员剖析材料范文
2014/12/18 职场文书
2016年党员学习廉政准则心得体会
2016/01/20 职场文书
springboot集成flyway自动创表的详细配置
2021/06/26 Java/Android
Python用any()函数检查字符串中的字母以及如何使用all()函数
2022/04/14 Python
MySQL中LAG()函数和LEAD()函数的使用
2022/08/14 MySQL