猿问

js解除绑定事件的问题

<!DOCTYPE html>

<html>

<head>

    <meta charset="UTF-8">

    <title>Title</title>

</head>

<body>

<input type="text">

<script>

    var input = document.querySelector('input');

    input.addEventListener('input',aaa,false)

    function a(e) {

        setTimeout(function () {

            b(e);

        },200)

    }

    function b(e) {

        input.removeEventListener('input',aaa,false);

    }


    function aaa(e) {

        console.log(e.target.value);

        a(e);

    }

</script>

</body>

</html>

<!DOCTYPE html>

<html>

<head>

    <meta charset="UTF-8">

    <title>Title</title>

</head>

<body>

<input type="text">

<script>

    var input = document.querySelector('input');

    input.addEventListener('input',aaa.bind(this),false)

    function a(e) {

        setTimeout(function () {

            b(e);

        },200)

    }

    function b(e) {

        input.removeEventListener('input',aaa.bind(this),false);

    }


    function aaa(e) {

        console.log(e.target.value);

        a(e);

    }

</script>

</body>

</html>

上面两个代码为什么一个可以解除DOM的绑定的事件,一个不可以,原因出现在bind这个函数,我想知道为什么bind(this)就不能实现这个功能呢????


慕标5832272
浏览 984回答 2
2回答

繁花不似锦

每次&nbsp;bind()&nbsp;都会生成一个新的函数返回出来,所以&nbsp;a.bind(o) !== a.bind(o)

陪伴而非守候

每次使用bind都会返回一个函数对象,你在add和remove中两次使用bind返回了两个不同的函数对象,所以无法取消事件绑定。
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答