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 相关文章推荐
JS创建优美的页面滑动块效果 - Glider.js
Sep 27 Javascript
javascript 变量作用域 代码分析
Jun 26 Javascript
防止xss和sql注入:JS特殊字符过滤正则
Apr 18 Javascript
浅谈Unicode与JavaScript的发展史
Jan 19 Javascript
jquery让指定的元素闪烁显示的方法
Mar 17 Javascript
Hallo.js基于jQuery UI所见即所得的Web编辑器
Jan 26 Javascript
JavaScript中for循环的几种写法与效率总结
Feb 03 Javascript
jQuery实现jQuery-form.js实现异步上传文件
Apr 28 jQuery
详解使用angular-cli发布i18n多国语言Angular应用
May 20 Javascript
jquery获取img的src值实例介绍
Jan 16 jQuery
javascript设计模式 ? 桥接模式原理与应用实例分析
Apr 13 Javascript
js实现限定范围拖拽的示例
Oct 26 Javascript
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
PHP 设计模式之观察者模式介绍
2012/02/22 PHP
基于php双引号中访问数组元素报错的解决方法
2018/02/01 PHP
PDO::_construct讲解
2019/01/27 PHP
Javascript的闭包
2009/12/31 Javascript
JavaScript在IE和Firefox(火狐)的不兼容问题解决方法小结
2010/04/13 Javascript
google jQuery 引用文件,jQuery 引用地址集合(jquery 1.2.6至jquery1.5.2)
2011/04/24 Javascript
jQuery中prepend()方法用法实例
2014/12/25 Javascript
jQuery实现的在线答题功能
2015/04/12 Javascript
setTimeout内不支持jquery的选择器的解决方案
2015/04/28 Javascript
简单好用的nodejs 爬虫框架分享
2017/03/26 NodeJs
JS简单验证上传文件类型的方法
2017/04/17 Javascript
详解如何在NodeJS项目中优雅的使用ES6
2017/04/22 NodeJs
ES6数组的扩展详解
2017/04/25 Javascript
基于Datatables跳转到指定页的简单实例
2017/11/09 Javascript
微信小程序收藏功能的实现代码
2018/06/12 Javascript
Vue.js的模板语法详解
2020/02/16 Javascript
[43:41]OG vs Newbee 2019国际邀请赛淘汰赛 胜者组 BO3 第一场 8.21.mp4
2020/07/19 DOTA
python错误处理详解
2014/09/28 Python
Python文档生成工具pydoc使用介绍
2015/06/02 Python
Python实现监控程序执行时间并将其写入日志的方法
2015/06/30 Python
python读取视频流提取视频帧的两种方法
2020/10/22 Python
python 读取目录下csv文件并绘制曲线v111的方法
2018/07/06 Python
flask实现验证码并验证功能
2019/12/05 Python
200行python代码实现贪吃蛇游戏
2020/04/24 Python
美国在线购买空气净化器、除湿器、加湿器网站:AllergyBuyersClub
2021/03/16 全球购物
SQL Server 2000数据库的文件有哪些,分别进行描述
2013/03/30 面试题
自我鉴定范文200字
2013/10/02 职场文书
地理教师岗位职责
2014/03/16 职场文书
小学教师师德演讲稿
2014/05/06 职场文书
公司员工活动策划方案
2014/08/20 职场文书
党员先进性教育整改措施
2014/09/18 职场文书
高中社区服务活动报告
2015/02/05 职场文书
安全伴我行主题班会
2015/08/13 职场文书
使用 MybatisPlus 连接 SqlServer 数据库解决 OFFSET 分页问题
2022/04/22 SQL Server
Java版 简易五子棋小游戏
2022/05/04 Java/Android
JavaScript正则表达式实现注册信息校验功能
2022/05/30 Java/Android