yuanwen http://www.jb51.net/article/32511.htm
写 addEventListener 和 attachEvent 区别的博文不少,不过大部分都把重点放置于前者是Firefox chrome,后者只是存在于IE系列中
写 addEventListener 和 attachEvent 区别的博文不少,不过大部分都把重点放置于前者是Firefox chrome,后者只是存在于IE系列中。

最近在写一个事件代理的时候,遇到一个BUG,发现除此外,二者绑定的执行函数中的 this 是不相同的,addEventListener 和 attachEvent函数在运行时候的上下文是不相同的。 
用了一个简单的demo来描述这个不同点:

复制代码代码如下:

<html xmlns="http://www.w3.org/1999/xhtml"> 
<<head> 
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" /> 
<<title>测试</title> 
</head> 
<<body> 
<div id="div1"> 
<a href="#" id="a1">test1</a> 
</div> 
<<div id="div2"> 
<a href="#" id="a2">test2</a> 
</div> 
</body> 
<<script type="text/javascript"> 
var testGolb = "diff"; // 定义一个全局变量 
var a1 = document.getElementById( "a1"); 
var a2 = document.getElementById( "a2"); 
function getEleId ( e) { 
// body... 
alert( this.id); 
alert( this.testGolb); 

a1.onclick = getEleId; 
if( a2.attachEvent){ 
a2.attachEvent( "onclick", getEleId); 
}else{ 
a2.addEventListener( 'click',getEleId); 

</script> 
</html> 

点击 test1 
chrome 下 第一次alert:" a1",第二次alert :"undefined" 
firefox 下 第一次alert:" a1",第二次alert :"undefined" 
IE 中 第一次alert:" a1",第二次alert :"undefined" 
这很好理解,这时候的this指向 #a1 这个DOM,所以alert id是 #a1的id “a1”,然后在this中,并没有testGolb这个变量,所以是undefined 
点击 test2 
chrome下 第一次alert:" a1",第二次alert :"undefined" 
firefox 下 第一次alert:" a1",第二次alert :"undefined" 
IE 中 第一次alert:" undefined",第二次alert :"diff"

chrome 和 firefox同点击test1时候的表现是一致的,而IE就不同了。使用attachEvent绑定事件时候,函数中的this指向的是window,并不是添加事件的dom,所以第一次的alert 值是 undefined,而this.testGlob 的值是diff。

转载于:https://www.cnblogs.com/lydialee/p/4733085.html

addEventListener和attachEvent二者绑定的执行函数中的this不相同【转载】相关推荐

  1. 浅谈自执行函数-立即调用的函数表达式

    好文,屯一波:原文地址:https://www.jianshu.com/p/c64bfbcd34c3 在JavaScript中,会遇到自执行匿名函数:(function () {/*code*/} ) ...

  2. 闭包、立即执行函数、this

    一.闭包 1.变量的作用域 变量的作用域分为全局变量和局部变量. (1)全局变量与局部变量 全局变量: 函数以外定义的变量是全局变量 函数内部可以直接读取全局变量 // 全局变量var n = 202 ...

  3. JavaScript基础08-day10【函数的返回值、实参、立即执行函数、方法、全局作用域、函数作用域、提前声明、this、工厂方法创建对象、构造函数】

    学习地址: 谷粒学院--尚硅谷 哔哩哔哩网站--尚硅谷最新版JavaScript基础全套教程完整版(140集实战教学,JS从入门到精通) JavaScript基础.高级学习笔记汇总表[尚硅谷最新版Ja ...

  4. PHP执行命令的函数有,php的命令执行函数

    php 动态执行 函数,PHP学习 你的知识信息已经过时了吗? ,php自动执行函数,php的命令执行函数 PHP 为执行外部命令提供大量函数_历史学_高等教育_教育专区.php基础PHP 为执行外部 ...

  5. JavaScript 之 立即执行函数

    1.定义 ​ 声明一个函数,并立即调用这个函数,此时这个函数就是立即执行函数,简单来说就是定义函数之后立即执行该函数.立即执行函数一般也写成匿名函数的形式,匿名函数写法为 function(){},就 ...

  6. JavaScript之立即执行函数

    我们知道,在一般情况下,函数必须先调用才能执行,如下所示,我们定义了一个函数,并且调用, function fn(){console.log(1);}fn(); 打印结果为:         如果不调 ...

  7. javascript 匿名自执行函数

    有一种匿名函数可以自动执行,这种函数定义如下: (function(){//执行一些语句 })(); 也可以为函数添加参数,语法格式如下: (function(arg_1,arg_2,...arg_n ...

  8. 匿名自执行函数是闭包吗?

    匿名函数与闭包函数应该是不一样的,我看到网上很多人把匿名自执行函数当做闭包,我认为这是不对的, 闭包定义: 闭包是在一个函数中可以访问另外一个函数的作用域   闭包:    function  fun ...

  9. js中当等于最小值是让代码不执行_JavaScript中最最基础的知识点

    JavaScript 中有很多很常用的也很基础的知识点需要我们牢牢记住,倒背如流,这样在开发的时候才能得心应手. 本文主要总结了DOM,Array,String,Math的一些常用方法,还有一些JS编 ...

最新文章

  1. git reset --hard xxxxxxx
  2. redis c客户端 hiredis
  3. 单向链表的C语言实现与基本操作
  4. 防御CSRF、XSS和SQL注入***
  5. 【小安翻唱】Dreams-黑之契约者 双蛋快乐~顺便来拉票咯!
  6. python控制多台手机,用python同时启动多个appium,并让多个手机同时执行脚本
  7. 判断字符串和数组是否为空
  8. 这些问题你遇见过吗?职场中,新人必须堤防的6大陷阱
  9. 「HenCoder Plus」Android 高级培养计划 FAQ
  10. 中兴e8820刷openwrt_中兴E8820V2(电信天翼宽带类似新路由3歌华链)-拆机及OpenWrt固件...
  11. 智能门锁电路图_智能门锁原理图,智能锁工作原理科普
  12. MLI_09 HMM(隐马尔可夫模型)
  13. CSScript 使用纪要
  14. AC/DC电源模块输入电压范围
  15. Oracle递归死循环怎么办?
  16. 【论文】Saliency Detection: A Spectral Residual Approach阅读笔记
  17. 管理学10大经典定律
  18. 【工具】vue excel导出
  19. RPG游戏-小地图系统(二)
  20. [附源码]JAVA毕业设计深州市特色蜜桃产业电子商务系统(系统+LW)

热门文章

  1. 2016-8-4学习正则表达式
  2. 设计模式之笔记--建造者模式(Builder)
  3. EBS R12.2 创建应用层的启动和关闭脚本
  4. SQL按字段分组取最大(小)值记录(重复记录)
  5. 软件开发知识--[ADO.NET Entity Framework]
  6. 自定义ImageButton,实现快进快退功能
  7. 使用SPA/GPA 参数--SAP内存参数设置SET /GET PARAMTER ID
  8. CV学习笔记-浅述CV方向
  9. 【OpenCV】基本数据类型
  10. existed hive ods_hive数据仓库建设