Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript为变量赋值_Javascript_Variables - Fatal编程技术网

Javascript为变量赋值

Javascript为变量赋值,javascript,variables,Javascript,Variables,我试图让表中的一个单元格在单击时告诉我它的编号 for(var j = 0; j < 8; j++){ var cell = row.insertCell(j); cell.name = j; cell.onclick=function(){alert(cell.name)}; } for(var j=0;j

我试图让表中的一个单元格在单击时告诉我它的编号

for(var j = 0; j < 8; j++){
    var cell = row.insertCell(j);
    cell.name = j;
    cell.onclick=function(){alert(cell.name)};
}
for(var j=0;j<8;j++){
var单元=行插入单元(j);
cell.name=j;
cell.onclick=function(){alert(cell.name)};
}
但是,这会为每个单元格打印数字8。如何将
j
的值保存在
cell.name
中,而不只是将其指向变量
j


谢谢。

重要提示:所有JavaScript开发人员都应该知道这一点。它会导致各种各样的奇怪的虫子,很难找到

这是JavaScript新手的常见错误。我以前也犯过同样的错误

循环中的函数不是为每次迭代创建的。它是具有相同闭包范围的同一个函数对象。因此,您的单元格将具有完全相同的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
    };
}
for(var j=0;j<8;j++){
var单元=行插入单元(j);
cell.name=j;
cell.onclick=createOnClick(单元格);
}
函数createOnClick(单元格){
返回函数(){
//你想用手机做什么就做什么
};
}

但是离开你的代码,你的
单元格
引用似乎是恒定的?你在哪里初始化
单元格
?如果你只有一个单元格,这将不起作用。更改
单元格
,使它在每次迭代中指向不同的单元格。我添加了“var cell=row.insertCell(j);”你以为这就是你想要的?像这样的?函数a(name){函数b(name){alert(name);}返回b();}一旦我打开笔记本电脑,几分钟后我会给你举个例子。这很有效。我将“alert(cell.name)”放在返回的函数中,现在它可以正常工作了。非常感谢:)