<html>
<body>
<p>点我</p>
<script>
var elem = document.getElementsByTagName('p')[0];
/*
elem.addEventListener( 'click', function() { alert( 1 ) }, false );
elem.removeEventListener( 'click', function() { alert( 1 ) }, false );
*/
fn = function() { alert( 1 ) }
elem.addEventListener( 'click', fn, false );
elem.removeEventListener( 'click', fn, false );</script>
</body>
</html>
====================================================================================
先侦听,然后去掉侦听, 在这是没有意义的, 但是在我的代码中需要这个
为了避免太多代码,我只写了ff下的,
我只想知道为什么不能换成注释里的东西, 而非要把fn提出来如果可以告诉我怎么传参数的话更好;

解决方案 »

  1.   

    <html>
    <body>
    <p>点我</p>
    <script>
    var elem = document.getElementsByTagName('p')[0];
    elem.onclick = function() {
        alert(1);
    }
    </script>
    </body>
    </html>
      

  2.   

    <html>
    <body>
    <p>点我</p>
    <script>
    var elem = document.getElementsByTagName('p')[0];
    elem.addEventListener('click', function(){alert( 1 );}, false);
    </script>
    </body>
    </html>
      

  3.   

    elem.addEventListener( 'click', function() { alert( 1 ) }, false );
    elem.removeEventListener( 'click', function() { alert( 1 ) }, false );
    这样的话,你删除的不是注册的那个function,因为引用不到注册的函数,你可以定义个变量
    elem.addEventListener( 'click', fn = function() { alert( 1 ) }, false );
    elem.removeEventListener( 'click', fn, false );
    试试吧!~
      

  4.   

    看可以这么理解不。 在JS 里面声明一个匿名函数, 它会自动执行 
    function() { alert(1); } 
    如果你声明是一个有名字的函数,它不会自动执行
    function fn() { alert(1); }侦听是不是也类似于这样去引用声明的方法。