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 相关文章推荐
在网页中控制wmplayer播放器
Jul 01 Javascript
Javascript----文件操作
Jan 18 Javascript
javascript 词法作用域和闭包分析说明
Aug 12 Javascript
简单谈谈javascript代码复用模式
Jan 28 Javascript
JavaScript替换当前页面的方法
Apr 03 Javascript
javascript框架设计之类工厂
Jun 23 Javascript
Jquery实现仿京东商城省市联动菜单
Nov 19 Javascript
js判断移动端是否安装某款app的多种方法
Dec 18 Javascript
jQuery实现获取h1-h6标题元素值的方法
Mar 06 Javascript
js 获取今天以及过去日期
Apr 11 Javascript
js经验分享 JavaScript反调试技巧
Mar 10 Javascript
详解JavaScript 的变量
Mar 08 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
解析link_mysql的php版
2013/06/30 PHP
使用PHP和HTML5 FormData实现无刷新文件上传教程
2014/09/06 PHP
php中get_object_vars()方法用法实例
2015/02/08 PHP
php基于数组函数实现关联表的编辑操作示例
2017/07/04 PHP
PHP经典设计模式之依赖注入定义与用法详解
2019/05/21 PHP
PHP数据源架构模式之表入口模式实例分析
2020/01/23 PHP
jquery 页面全选框实践代码
2010/04/02 Javascript
解决IE下select标签innerHTML插入option的BUG(兼容IE,FF,Opera,Chrome,Safari)
2010/05/13 Javascript
javascript基于HTML5 canvas制作画箭头组件
2014/06/25 Javascript
javascript实现瀑布流自适应遇到的问题及解决方案
2015/01/28 Javascript
javascript实现的全国省市县无刷新多级关联菜单效果代码
2016/08/01 Javascript
vue-cli如何快速构建vue项目
2017/04/26 Javascript
js实现网页的两个input标签内的数值加减(示例代码)
2017/08/15 Javascript
深入浅析angular和vue还有jquery的区别
2018/08/13 jQuery
如何写好一个vue组件,老夫的一年经验全在这了(推荐)
2019/05/18 Javascript
在Angular中实现一个级联效果的下拉框的示例代码
2020/05/20 Javascript
[01:04:48]VGJ.S vs TNC Supermajor 败者组 BO3 第一场 6.6
2018/06/07 DOTA
[52:20]DOTA2-DPC中国联赛正赛 SAG vs XGBO3 第一场 3月5日
2021/03/11 DOTA
点球小游戏python脚本
2018/05/22 Python
在pandas多重索引multiIndex中选定指定索引的行方法
2018/11/16 Python
Python后台管理员管理前台会员信息的讲解
2019/01/28 Python
OpenCV+Python识别车牌和字符分割的实现
2019/01/31 Python
利用Python库Scapy解析pcap文件的方法
2019/07/23 Python
keras获得model中某一层的某一个Tensor的输出维度教程
2020/01/24 Python
Python gevent协程切换实现详解
2020/09/14 Python
使用css3实现超炫的loading加载动画效果
2014/05/07 HTML / CSS
HTML5触摸事件实现移动端简易进度条的实现方法
2018/05/04 HTML / CSS
一帮一活动总结
2014/05/08 职场文书
三严三实民主生活会发言稿
2014/10/13 职场文书
运动会搞笑广播稿
2014/10/14 职场文书
党员四风问题个人对照检查材料
2014/10/26 职场文书
毕业实习证明(4篇)
2014/10/28 职场文书
毕业典礼致辞
2015/07/29 职场文书
《风筝》教学反思
2016/02/23 职场文书
MySQL COUNT函数的使用与优化
2021/05/10 MySQL
用Python生成会跳舞的美女
2022/01/18 Python