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 相关文章推荐
一个cssQuery对象 javascript脚本实现代码
Jul 21 Javascript
用js来解决ajax读取页面乱码
Nov 28 Javascript
JS中getYear()和getFullYear()区别分析
Jul 04 Javascript
js设置控件的隐藏与显示的两种方法
Aug 21 Javascript
iframe如何动态创建及释放其所占内存
Sep 03 Javascript
JavaScript中获取高度和宽度函数总结
Oct 08 Javascript
使用js画图之正弦曲线
Jan 12 Javascript
javascript框架设计之类工厂
Jun 23 Javascript
CSS图片响应式 垂直水平居中
Aug 14 Javascript
JavaScript实现设计模式中的单例模式的一些技巧总结
May 17 Javascript
如何使用headjs来管理和异步加载js
Nov 29 Javascript
基于JavaScript实现简单的音频播放功能
Jan 07 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的swoole扩展安装方法详细教程
2016/05/18 PHP
PHP封装mysqli基于面向对象的mysql数据库操作类与用法示例
2019/02/25 PHP
js removeChild 障眼法 可能出现的错误
2009/10/06 Javascript
Jquery 表单验证类介绍与实例
2013/06/09 Javascript
简单的jquery左侧导航栏和页面选中效果
2014/08/21 Javascript
javascript中bind函数的作用实例介绍
2014/09/28 Javascript
jquery实现的蓝色二级导航条效果代码
2015/08/24 Javascript
Express实现前端后端通信上传图片之存储数据库(mysql)傻瓜式教程(一)
2015/12/10 Javascript
详解AngularJS中的http拦截
2016/02/09 Javascript
js获取腾讯视频ID的方法
2016/10/03 Javascript
基于slideout.js实现移动端侧边栏滑动特效
2016/11/28 Javascript
js cookie实现记住密码功能
2017/01/17 Javascript
AngularJS中$http的交互问题
2017/03/29 Javascript
ExtJs的Ext.Ajax.request实现waitMsg等待提示效果
2017/06/14 Javascript
JS 中使用Promise 实现红绿灯实例代码(demo)
2017/10/20 Javascript
jQuery使用动画队列自定义动画操作示例
2018/06/16 jQuery
vue radio单选框,获取当前项(每一项)的value值操作
2020/09/10 Javascript
基于JavaScript实现随机点名器
2021/02/25 Javascript
[03:14]2014DOTA2西雅图国际邀请赛 EG战队巡礼
2014/07/07 DOTA
Python ORM框架SQLAlchemy学习笔记之关系映射实例
2014/06/10 Python
Python的组合模式与责任链模式编程示例
2016/02/02 Python
Python实现脚本锁功能(同时只能执行一个脚本)
2017/05/10 Python
用tensorflow实现弹性网络回归算法
2018/01/09 Python
Python中实现变量赋值传递时的引用和拷贝方法
2018/04/29 Python
pthon贪吃蛇游戏详细代码
2019/01/27 Python
python+selenium select下拉选择框定位处理方法
2019/08/24 Python
Python 实现自动获取种子磁力链接方式
2020/01/16 Python
社区国庆节活动方案
2014/02/05 职场文书
调查研究项目计划书
2014/04/29 职场文书
超市创意活动方案
2014/08/15 职场文书
廉政文化进校园广播稿
2014/10/20 职场文书
2014年党建工作总结
2014/11/11 职场文书
钢琴师观后感
2015/06/12 职场文书
如何用JS实现网页瀑布流布局
2021/04/24 Javascript
Vue router配置与使用分析讲解
2022/12/24 Vue.js