84669 person learning
152542 person learning
20005 person learning
5487 person learning
7821 person learning
359900 person learning
3350 person learning
180660 person learning
48569 person learning
18603 person learning
40936 person learning
1549 person learning
1183 person learning
32909 person learning
http://jsbin.com/werexoxeqe/e...为什么使用addEvent或者attachEvent绑定的函数会自执行?直接使用onclick绑定的事件不会执行??
认证0级讲师
call会立即执行,用bind就ok了。改成这样咯
call
bind
addEvent(document.querySelector('.icon-bofang'),'click',xxx.bind(obj)) document.querySelector('.icon-bofang').onclick = xxx.bind(obj)
首先,addEvent这是一个人为封装的方法:
然后你调用了这个方法
addEvent(document.querySelector('.icon-bofang'),'click',xxx.call(obj))
这个方法实际上做的事是:
ele["on"+event]=fn;
也就是
document.querySelector('.icon-bofang').onclick=xxx.call(obj);
这不就直接执行了么?更简单一点,你直接试试这句:
document.querySelector('.icon-bofang').onclick=console.log('我立马就执行了');
看出来了么?下面这句外面套了个匿名函数,而匿名函数没有被立即执行!
document.querySelector('.icon-bofang').onclick=function(){ console.log('哥点击后才执行'); }
OVER~
**
addEvent(document.querySelector('.icon-bofang'), 'click', function() { xxx.call(obj); });
call
会立即执行,用bind
就ok了。改成这样咯首先,addEvent这是一个人为封装的方法:
然后你调用了这个方法
这个方法实际上做的事是:
也就是
这不就直接执行了么?
更简单一点,你直接试试这句:
看出来了么?
下面这句外面套了个匿名函数,而匿名函数没有被立即执行!
OVER~
**
所以你传入方法参数应该这样:
**