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 相关文章推荐
jquery lazyload延迟加载技术的实现原理分析
Jan 24 Javascript
jquery 获取 outerHtml 包含当前节点本身的代码
Oct 30 Javascript
鼠标事件的screenY,pageY,clientY,layerY,offsetY属性详解
Mar 12 Javascript
jQuery检测鼠标左键和右键点击的方法
Mar 17 Javascript
jQuery右侧选项卡焦点图片轮播特效代码分享
Sep 05 Javascript
深入理解JQuery中的事件与动画
May 18 Javascript
解决Window10系统下Node安装报错的问题分析
Dec 13 Javascript
jQuery实现文章图片弹出放大效果
Apr 06 jQuery
Vue2.0权限树组件实现代码
Aug 29 Javascript
webpack4.0打包优化策略整理小结
Mar 30 Javascript
webpack4+Vue搭建自己的Vue-cli项目过程分享
Aug 29 Javascript
three.js 如何制作魔方
Jul 31 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下用GD生成生成缩略图的两个选择和区别
2007/04/17 PHP
使用php计算排列组合的方法
2013/11/13 PHP
php实现按照权重随机排序数据的方法
2015/01/09 PHP
PHP小白必须要知道的php基础知识(超实用)
2017/10/10 PHP
PHP实现求连续子数组最大和问题2种解决方法
2017/12/26 PHP
php + ajax 实现的写入数据库操作简单示例
2020/05/16 PHP
Javascript实例教程(19) 使用HoTMetal(4)
2006/12/23 Javascript
用Jquery实现滚动新闻
2014/02/12 Javascript
jquery事件preventDefault()方法用法实例
2015/01/16 Javascript
javascript性能优化之事件委托实例详解
2015/12/12 Javascript
ajax异步请求详解
2017/01/06 Javascript
在Vue项目中使用d3.js的实例代码
2018/05/01 Javascript
Web安全之XSS攻击与防御小结
2018/12/13 Javascript
玩转Koa之koa-router原理解析
2018/12/29 Javascript
使用vue脚手架(vue-cli)搭建一个项目详解
2019/05/09 Javascript
原生JS 实现的input输入时表格过滤操作示例
2019/08/03 Javascript
jquery实现垂直手风琴导航栏
2020/02/18 jQuery
[03:19]2016国际邀请赛中国区预选赛第四日TOP10镜头集锦
2016/07/01 DOTA
[01:39:04]DOTA2-DPC中国联赛 正赛 SAG vs CDEC BO3 第二场 2月1日
2021/03/11 DOTA
使用Python编写类UNIX系统的命令行工具的教程
2015/04/15 Python
用Python的Tornado框架结合memcached页面改善博客性能
2015/04/24 Python
Python使用CMD模块更优雅的运行脚本
2015/05/11 Python
python 生成器生成杨辉三角的方法(必看)
2017/04/10 Python
Python的IDEL增加清屏功能实例
2017/06/19 Python
Django中针对基于类的视图添加csrf_exempt实例代码
2018/02/11 Python
linux环境下Django的安装配置详解
2019/07/22 Python
python爬虫 基于requests模块的get请求实现详解
2019/08/20 Python
Django和Flask框架优缺点对比
2019/10/24 Python
python语言的优势是什么
2020/06/17 Python
WoolOvers爱尔兰:羊绒、羊毛和棉针织品
2017/01/04 全球购物
巴黎欧莱雅法国官网:L’Oreal Paris
2019/04/30 全球购物
一份软件工程师的面试试题
2016/02/01 面试题
新闻编辑专业毕业自荐书范文
2014/02/05 职场文书
北京奥运会口号
2014/06/21 职场文书
群众路线剖析材料(四风)
2014/11/05 职场文书
思想工作总结范文
2015/08/12 职场文书