javascript中的removeEventListener失效问题

一般现在我们用js绑定事件是 addEventListener(event,function,bool)

event:事件的名称 字符串 如:'click',

function: 事件处理的方法:

bool: 事件的处理方式; false 冒泡,true 捕获

这里就不过得的说明 addEventListener 这个方法了

下面是主题 removeEventListener (event,function,bool) 参数和 addEventListener 的参数一样,不多做解释

下面我遇到的具体问题

我在 很多a标签循环绑定事件的时候,发现 removeEventListener 失效了

具体写法如下:

绑定事件:

var list = document.getElementsByTagName('a');
    for (var i = list.length - 1; i >= 0; i--) {
        list[i].addEventListener('click',function(e){
            console.log('addEventListener');
            return false;
        },false);
    };

取消事件:

for (var i = list.length - 1; i >= 0; i--) {
        list[i].removeEventListener('click',function(){
            console.log('removeEventListener');
        },false);
    };

发现取消事件不管用了,找了好久有人说 function需要和绑定的方法是一个,这样才能取消

最后解决为:

function addAndRemove(){
   console.log('add');
   console.log('remove');  
}

for (var i = list.length - 1; i >= 0; i--) {
        list[i].addEventListener('click',addAndRemove,false);
};

for (var i = list.length - 1; i >= 0; i--) {
        list[i].removeEventListener('click',addAndRemove,false);
};

最后只是知道了绑定和取消需要用同一个函数,但是不知道为什么,希望有大牛给解释一下!!!!