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 相关文章推荐
ExtJs中gridpanel分组后组名排序实例代码
Dec 02 Javascript
JS判断文本框内容改变事件的简单实例
Mar 07 Javascript
javascript中使用正则计算中文长度的例子
Apr 29 Javascript
JS实现简单路由器功能的方法
May 27 Javascript
基于jQuery仿淘宝产品图片放大镜代码分享
Jun 23 Javascript
js倒计时简单实现方法
Dec 17 Javascript
使用jQuery.Qrcode插件在客户端动态生成二维码并添加自定义Logo
Sep 01 Javascript
微信小程序 http请求详细介绍
Oct 09 Javascript
简易的JS计算器实现代码
Oct 18 Javascript
AngularJS表格添加序号的方法
Mar 03 Javascript
react 实现页面代码分割、按需加载的方法
Apr 03 Javascript
react中使用swiper的具体方法
May 15 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初学者的8点有效建议
2010/11/20 PHP
php函数实现判断是否移动端访问
2015/03/03 PHP
php使用APC实现实时上传进度条功能
2015/10/26 PHP
PHP文件系统管理(实例讲解)
2017/09/19 PHP
PHP项目多语言配置平台实现过程解析
2020/05/18 PHP
TP3.2框架分页相关实现方法分析
2020/06/03 PHP
javascript 动态设置已知select的option的value值的代码
2009/12/16 Javascript
9个JavaScript评级/投票插件
2010/01/18 Javascript
jquery 图片轮换效果
2010/07/29 Javascript
一个基于jquery的文本框记数器
2012/09/19 Javascript
js/jquery解析json和数组格式的方法详解
2014/01/09 Javascript
jquery mobile的触控点击事件会多次触发问题的解决方法
2014/05/08 Javascript
JavaScript数组对象实现增加一个返回随机元素的方法
2015/07/27 Javascript
自己动手写的jquery分页控件(非常简单实用)
2015/10/28 Javascript
最简单的JavaScript图片轮播代码(两种方法)
2015/12/18 Javascript
为什么JavaScript没有块级作用域
2016/05/22 Javascript
详解vue项目的构建,打包,发布全过程
2017/11/23 Javascript
对angular 监控数据模型变化的事件方法$watch详解
2018/10/09 Javascript
详解vue如何使用rules对表单字段进行校验
2018/10/17 Javascript
ES6 对象的新功能与解构赋值介绍
2019/02/05 Javascript
详解ES7 Decorator 入门解析
2019/02/18 Javascript
微信小程序云开发使用方法新手初体验
2019/05/16 Javascript
vue动态循环出的多个select出现过的变为disabled(实例代码)
2019/11/10 Javascript
js获取本日、本周、本月的时间代码
2020/02/01 Javascript
三剑客:offset、client和scroll还傻傻分不清?
2020/12/04 Javascript
深入理解python中sort()与sorted()的区别
2018/08/29 Python
python使用ddt过程中遇到的问题及解决方案【推荐】
2018/10/29 Python
python爬取指定微信公众号文章
2018/12/20 Python
Html5无刷新修改browser Url的方法
2014/01/15 HTML / CSS
诺思信科技(南京)有限公司.NET笔试题答案
2013/07/06 面试题
临床医学专业个人的自我评价
2013/09/27 职场文书
家长通知书教师评语
2014/04/17 职场文书
2015年教学副校长工作总结
2015/07/22 职场文书
《普罗米修斯》教学反思
2016/02/22 职场文书
经典格言警句:没有热忱,世间便无进步
2019/11/13 职场文书
Spring Bean的实例化之属性注入源码剖析过程
2021/06/13 Java/Android