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 相关文章推荐
JXTree对象,读取外部xml文件数据,生成树的函数
Apr 02 Javascript
javascript 一段左右两边随屏滚动的代码
Jun 18 Javascript
JQuery自适应IFrame高度(支持嵌套 兼容IE,ff,safafi,chrome)
Mar 28 Javascript
firefox浏览器不支持innerText的解决方法
Aug 07 Javascript
javascript中html字符串转化为jquery dom对象的方法
Aug 27 Javascript
JavaScript事件 &quot;事件对象&quot;的注意要点
Jan 14 Javascript
js微信分享API
Oct 11 Javascript
利用VUE框架,实现列表分页功能示例代码
Jan 12 Javascript
微信小程序实现图片轮播及文件上传
Apr 07 Javascript
vue通过watch对input做字数限定的方法
Jul 13 Javascript
Echart折线图手柄触发事件示例详解
Dec 16 Javascript
layui动态渲染生成select的option值方法
Sep 23 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多个文件及图片上传实例详解
2014/11/10 PHP
php中smarty变量修饰用法实例分析
2015/06/11 PHP
使用图灵api创建微信聊天机器人
2015/07/23 PHP
php将服务端的文件读出来显示在web页面实例
2016/10/31 PHP
IE JS编程需注意的内存释放问题
2009/06/23 Javascript
jQuery 点击图片跳转上一张或下一张功能的实现代码
2010/03/12 Javascript
完美解决AJAX跨域问题
2013/11/01 Javascript
iScroll.js 使用方法参考
2016/05/16 Javascript
从零学习node.js之搭建http服务器(二)
2017/02/21 Javascript
vue.js事件处理器是什么
2017/03/20 Javascript
基于wordpress的ajax写法详解
2018/01/02 Javascript
详解webpack的proxyTable无效的解决方案
2018/06/15 Javascript
关于JavaScript中高阶函数的魅力详解
2018/09/07 Javascript
详解SPA中前端路由基本原理与实现方式
2018/09/12 Javascript
新手必须知的Node.js 4个JavaScript基本概念
2018/09/16 Javascript
Vue.js上传图片到阿里云OSS存储的方法示例
2018/12/13 Javascript
使用vue-cli4.0快速搭建一个项目的方法步骤
2019/12/04 Javascript
在 Vue 中编写 SVG 图标组件的方法
2020/02/24 Javascript
vant自定义二级菜单操作
2020/11/02 Javascript
[52:06]FNATIC vs NIP 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/19 DOTA
Python手机号码归属地查询代码
2016/05/04 Python
Python基于辗转相除法求解最大公约数的方法示例
2018/04/04 Python
Python3 jupyter notebook 服务器搭建过程
2018/11/30 Python
Python中出现IndentationError:unindent does not match any outer indentation level错误的解决方法
2020/04/18 Python
python实现电子书翻页小程序
2019/07/23 Python
windows 10 设定计划任务自动执行 python 脚本的方法
2019/09/11 Python
Python 为什么推荐蛇形命名法原因浅析
2020/06/18 Python
python 利用zmail库发送邮件
2020/09/11 Python
css3 iphone玻璃透明气泡完美实现
2013/03/20 HTML / CSS
好莱坞百老汇御用王牌美妆:Koh Gen Do 江原道
2018/04/03 全球购物
英国地毯卖家:The Rug Seller
2019/07/18 全球购物
门卫班长岗位职责
2013/12/15 职场文书
2015年语文教学工作总结
2015/05/25 职场文书
毕业论文答辩演讲稿
2015/06/23 职场文书
2016年安全月活动总结
2016/04/06 职场文书
Golang数据类型和相互转换
2022/04/12 Golang