在我的函数中,“this”仅指什么?

What does "this" alone refer to in my function?

提问人:Brenden Baio 提问时间:11/2/2022 最后编辑:Brenden Baio 更新时间:11/2/2022 访问量:54

问:

只是想弄清楚“updateCell”参数中的“this”在这段代码中指的是什么:

function initializeGame() {
    cells.forEach(cell => cell.addEventListener("click", cellClicked))
    restartBtn.addEventListener("click", restartGame);
    statusText.textContent = `${currentPlayer}'s turn`;
    running = true;
}   
function cellClicked(){
    console.log('test');
    const cellIndex = this.getAttribute("cellIndex");
 
    if(options[cellIndex] != "" || !running) {
        return;
    }
    
    updateCell(this, cellIndex);
    checkWinner();
}
function updateCell(cell, index) {
    options[index] = currentPlayer;
    cell.textContent = currentPlayer;
}

我知道只有“this”可以引用全局变量,但是没有称为“this”的全局变量,所以我对它的工作原理有点困惑。

JavaScript 函数 global-variables this 关键字

评论

1赞 trincot 11/2/2022
的值由函数的调用方式决定。由于您没有包含调用的代码,并且您的代码的左大括号多于右大括号,因此不可能说。thiscellClicked
0赞 Brenden Baio 11/2/2022
gocha 我编辑了它!

答:

2赞 trincot 11/2/2022 #1

作为参数传递给的回调稍后将调用,并设置为绑定事件处理程序的 DOM 元素。因此,在您的代码中,这将是 .cell.addEventListenerthiscell

如果您发现使用令人困惑,可以改用以下命令:this

问题是回调是用事件对象作为参数调用的。如果您愿意,还可以使用该事件对象及其 currentTarget 属性来找出与哪个 DOM 元素有关:

function cellClicked(evt){
    const cell = evt.currentTarget;
    // At this point, `cell===this` is true
    const cellIndex = cell.getAttribute("cellIndex");
 
    if(options[cellIndex] != "" || !running) {
        return;
    }
    
    updateCell(cell, cellIndex);
    checkWinner();
}