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 页面只自动刷新一次
Jul 10 Javascript
jquery在Chrome下获取图片的长宽问题解决
Mar 20 Javascript
javascript实现全角与半角字符的转换
Jan 07 Javascript
JavaScript中的Repaint和Reflow用法详解
Jul 27 Javascript
BootStrap文件上传样式超好看【持续更新】
May 10 Javascript
浅析bootstrap原理及优缺点
Mar 19 Javascript
AngularJS双向绑定和依赖反转实例详解
Apr 15 Javascript
微信小程序引用公共js里的方法的实例详解
Aug 17 Javascript
Vue父子组件双向绑定传值的实现方法
Jul 31 Javascript
vuex的module模块用法示例
Nov 12 Javascript
详解Angular模板引用变量及其作用域
Nov 23 Javascript
JavaScript实现滑动门效果
Jan 18 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读取javascript设置的cookies的代码
2010/04/12 PHP
php 计划任务 检测用户连接状态
2012/03/29 PHP
详解php的socket通信
2015/08/11 PHP
php 人员权限管理(RBAC)实例(推荐)
2017/05/24 PHP
php获得刚插入数据的id 的几种方法总结
2018/05/31 PHP
面向对象的Javascript之三(封装和信息隐藏)
2012/01/27 Javascript
使用jQuery.fn自定义jQuery翻页插件
2013/01/20 Javascript
js获取键盘按键响应事件(兼容各浏览器)
2013/05/16 Javascript
js的隐含参数(arguments,callee,caller)使用方法
2014/01/28 Javascript
jQuery消息提示框插件Tipso
2015/05/04 Javascript
jQuery实现分章节锚点“回到顶部”动画特效代码
2015/10/23 Javascript
基于jquery实现图片放大功能
2016/05/07 Javascript
Vue.js每天必学之组件与组件间的通信
2016/09/08 Javascript
vue2.0实现分页组件的实例代码
2017/06/22 Javascript
解决Vue 通过下表修改数组,页面不渲染的问题
2018/03/08 Javascript
vue加载自定义的js文件方法
2018/03/13 Javascript
解决layui 三级联动下拉框更新时回显的问题
2019/09/03 Javascript
Jquery Fade用法详解
2020/11/06 jQuery
解决Vue watch里调用方法的坑
2020/11/07 Javascript
跟老齐学Python之编写类之三子类
2014/10/11 Python
Python 文件操作的详解及实例
2017/09/18 Python
Python模块搜索路径代码详解
2018/01/29 Python
pandas的object对象转时间对象的方法
2018/04/11 Python
pygame实现俄罗斯方块游戏(AI篇1)
2019/10/29 Python
使用py-spy解决scrapy卡死的问题方法
2020/09/29 Python
Anaconda详细安装步骤图文教程
2020/11/12 Python
css3气泡 css3关键帧动画创建的动态通知气泡
2013/02/26 HTML / CSS
通过css3的filter滤镜改变png图片的颜色的示例代码
2020/05/06 HTML / CSS
写出一个方法实现冒泡排序
2016/07/08 面试题
基层干部群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
村主任群众路线个人对照检查材料
2014/09/26 职场文书
2014年销售经理工作总结
2014/12/01 职场文书
亲戚关系证明
2015/06/24 职场文书
2016国培学习心得体会
2016/01/08 职场文书
PHP策略模式写法
2021/04/01 PHP
Mysql效率优化定位较低sql的两种方式
2021/05/26 MySQL