if(allSquares[block].classList.toggle("showPath"))
        {
            allSquares[block].addEventListener('click', moveAbleBoxes);
            moveAbleBoxes.bind(this, i, j, piece);
            //moveAbleBoxes(this, i, j, piece);
        }
        else {
            allSquares[block].removeEventListener('click', moveAbleBoxes);
            console.log('listener removed');
        }


我不知何故想要将那些参数传递给函数'moveAbleBoxes',后来我也想删除该eventListener。所以我不能使用匿名功能。

最佳答案

当您在函数上调用bind时,它将返回具有bound属性的新函数。只需存储该函数,以便稍后可以检索它以删除事件处理程序。

var moveAbleBoxesB = {};
...
    if(allSquares[block].classList.toggle("showPath"))
    {
        moveAbleBoxesB[block] = moveAbleBoxes.bind(this, i, j, piece);
        allSquares[block].addEventListener('click', moveAbleBoxesB[block]);
        //moveAbleBoxes(this, i, j, piece);
    }
    else {
        allSquares[block].removeEventListener('click', moveAbleBoxesB[block]);
        console.log('listener removed');
    }

09-26 02:35