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 相关文章推荐
jquery 实现的全选和反选
Apr 15 Javascript
Mootools 1.2教程 类(一)
Sep 15 Javascript
浅析JavaScript事件和方法
Feb 28 Javascript
使用AngularJS和PHP的Laravel实现单页评论的方法
Jun 19 Javascript
对JavaScript客户端应用编程的一些建议
Jun 24 Javascript
js淡入淡出的图片轮播效果代码分享
Aug 24 Javascript
JavaScript 拖拽实例代码
Sep 21 Javascript
JS日程管理插件FullCalendar中文说明文档
Feb 06 Javascript
vue.js指令v-for使用以及下标索引的获取
Jan 31 Javascript
mpvue实现小程序签到金币掉落动画(api实现)
Oct 17 Javascript
vue+koa2搭建mock数据环境的详细教程
May 18 Javascript
简介JavaScript错误处理机制
Aug 04 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
Zend 输出产生XML解析错误
2009/03/03 PHP
PHP实现把MySQL数据库导出为.sql文件实例(仿PHPMyadmin导出功能)
2014/05/10 PHP
php投票系统之增加与删除投票(管理员篇)
2016/07/01 PHP
TP(thinkPHP)框架多层控制器和多级控制器的使用示例
2018/06/13 PHP
win10下 php安装seaslog扩展的详细步骤
2020/12/04 PHP
jQuery Dialog 弹出层对话框插件
2010/08/09 Javascript
有关于JS辅助函数inherit()的问题
2013/04/07 Javascript
jquery中的ajax方法怎样通过JSONP进行远程调用
2014/05/04 Javascript
充分发挥Node.js程序性能的一些方法介绍
2015/06/23 Javascript
浅谈如何实现easyui的datebox格式化
2016/06/12 Javascript
全面解析Bootstrap中tooltip、popover的使用方法
2016/06/13 Javascript
Node.js Buffer模块功能及常用方法实例分析
2019/01/05 Javascript
微信小程序实现购物页面左右联动
2019/02/15 Javascript
使用 vue 实现灭霸打响指英雄消失的效果附demo
2019/05/06 Javascript
babel7.x和webpack4.x配置vue项目的方法步骤
2019/05/12 Javascript
简单了解JavaScript arguement原理及作用
2020/05/28 Javascript
[01:38]DOTA2 2015国际邀请赛中国区预选赛 Showopen
2015/06/01 DOTA
跟老齐学Python之总结参数的传递
2014/10/10 Python
python实现在目录中查找指定文件的方法
2014/11/11 Python
Python入门必须知道的11个知识点
2018/03/21 Python
pyspark.sql.DataFrame与pandas.DataFrame之间的相互转换实例
2018/08/02 Python
Python实现将HTML转成PDF的方法分析
2019/05/04 Python
python中时间、日期、时间戳的转换的实现方法
2019/07/06 Python
python字典setdefault方法和get方法使用实例
2019/12/25 Python
python设置中文界面实例方法
2020/10/27 Python
实例讲解使用CSS实现多边框和透明边框的方法
2015/09/08 HTML / CSS
ktv筹备计划书
2014/05/03 职场文书
地质灾害防治方案
2014/05/14 职场文书
社区班子对照检查材料
2014/08/27 职场文书
小学师德师风整改措施
2014/10/27 职场文书
2014年质量管理工作总结
2014/12/01 职场文书
2014年信息中心工作总结
2014/12/17 职场文书
2015年酒店工作总结
2015/04/28 职场文书
《棉鞋里的阳光》教学反思
2016/02/20 职场文书
Nginx进程调度问题详解
2021/09/25 Servers
详解Spring Security中的HttpBasic登录验证模式
2022/03/17 Java/Android