重要: すべての JavaScript 開発者は、このことを知っておく必要があります。見つけるのが非常に難しい、あらゆる種類の奇妙なバグが発生します。
これは、JavaScript を初めて使用する人によくある間違いです。私は前に同じ間違いをしました。
ループ内の関数は、反復ごとに作成されるわけではありません。これは、同じクロージャ スコープを持つ同じ 1 つの関数オブジェクトです。したがって、セルにはまったく同じ onclick コールバックがあります。
ここでの私のアドバイスは、決してループ内で関数を作成しないことです。代わりに、コールバック関数を返す関数を作成して呼び出し、onclick に割り当てます。
for (var j = 0; j < 8; j++) {
var cell = row.insertCell(j);
cell.name = j;
cell.onclick = createOnClick(cell);
}
function createOnClick(cell) {
return function () {
// do whatever you want to do with cell
};
}