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写的一个DIV 弹出网页对话框
Aug 14 Javascript
用Jquery实现多级下拉框无刷新的联动
Dec 22 Javascript
js+css实现增加表单可用性之提示文字
Jun 03 Javascript
js父窗口关闭时子窗口随之关闭完美解决方案
Apr 29 Javascript
JS中getYear()和getFullYear()区别分析
Jul 04 Javascript
javascript实现避免页面按钮重复提交
Jan 08 Javascript
angularjs ocLazyLoad分步加载js文件实例
Jan 17 Javascript
JavaScript实现简单的树形菜单效果
Jun 23 Javascript
vue-cli项目代理proxyTable配置exclude的方法
Sep 20 Javascript
vue项目前端知识点整理【收藏】
May 13 Javascript
Vue3.0结合bootstrap创建多页面应用
May 28 Javascript
详解vue微信网页授权最终解决方案
Jun 16 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版(4)
2006/10/09 PHP
PHP多例模式介绍
2013/06/24 PHP
PHP抓取淘宝商品的用户晒单评论+图片+搜索商品列表实例
2016/04/14 PHP
php+ajax注册实时验证功能
2016/07/20 PHP
php+ajax实现带进度条的上传图片功能【附demo源码下载】
2016/09/14 PHP
javascript 闭包
2011/09/15 Javascript
jquery创建并行对象或者合并对象的实现代码
2012/10/10 Javascript
js使用cookie记录用户名的方法
2015/11/26 Javascript
js实现字符串和数组之间相互转换操作
2016/01/12 Javascript
精通JavaScript的this关键字
2020/05/28 Javascript
微信小程序获取手机系统信息的方法【附源码下载】
2017/12/07 Javascript
深入理解ES6中let和闭包
2018/02/22 Javascript
Vue 组件传值几种常用方法【总结】
2018/05/28 Javascript
vue中动态设置meta标签和title标签的方法
2018/07/11 Javascript
解决Vue.js父组件$on无法监听子组件$emit触发事件的问题
2018/09/12 Javascript
了解javascript中let和var及const关键字的区别
2019/05/24 Javascript
vue 解决路由只变化参数页面组件不更新问题
2019/11/05 Javascript
原生JS实现烟花效果
2020/03/10 Javascript
vue实现禁止浏览器记住密码功能的示例代码
2021/02/03 Vue.js
基于并发服务器几种实现方法(总结)
2017/12/29 Python
python查找指定文件夹下所有文件并按修改时间倒序排列的方法
2018/10/21 Python
pytorch 调整某一维度数据顺序的方法
2018/12/08 Python
Python 3 实现定义跨模块的全局变量和使用教程
2019/07/07 Python
Python Scrapy图片爬取原理及代码实例
2020/06/12 Python
Python ckeditor富文本编辑器代码实例解析
2020/06/22 Python
python json.dumps() json.dump()的区别详解
2020/07/14 Python
基于Python爬取股票数据过程详解
2020/10/21 Python
英国最大的老式糖果店:A Quarter Of
2017/04/08 全球购物
俄罗斯茶和咖啡网上商店:Tea.ru
2021/01/26 全球购物
护理专业毕业生自我鉴定总结
2014/03/24 职场文书
学生上课看漫画的检讨书
2014/09/26 职场文书
小学班主任个人总结
2015/03/03 职场文书
2015年支教教师工作总结
2015/07/22 职场文书
公司年会主持词范文!
2019/05/07 职场文书
Python标准库之typing的用法(类型标注)
2021/06/02 Python
mongodb数据库迁移变更的解决方案
2021/09/04 MongoDB