gpt4 book ai didi

javascript - 我怎么会误解这个例子中的 JavaScript 闭包解析?

转载 作者:行者123 更新时间:2023-11-30 08:14:56 26 4
gpt4 key购买 nike

我以为我了解 JavaScript 闭包,但显然我不了解。从我的代码中摘录以下内容:

for(var i=0; i<data.List.length; i++) {
var entry = data.List[i]; // I thought this line should have resolved the issue?
$('<tr class="logs-list-item"><td class="lefticon nowrap"><a href="javascript:void(0)"></a></td><td class="right nowrap"></td></tr>')
.appendTo(tbody)
.find('a').text(entry.Text)
.click(function() {
alert(entry.Text + ' ' + entry.Filename);
showLog(id, entry.Filename);
})
.closest('tr').find('td:last').text(entry.When);
}

如您所见,我们正在遍历文件名条目列表,并为每个条目添加一个表行,其中包含一些描述文件的文本,并为每个应该调用函数的条目添加一个 onclick 处理程序 showLog() 包含所选文件名的详细信息。

实际上发生的是,所有行都正确添加,但每一行都被分配了一个处理列表中最后一项的处理程序。

在第 2 行,我在 for 循环中定义了一个变量,并在闭包中访问了该变量,但是当实际调用该函数时,它最终似乎没有正确解析。

知道我做错了什么吗?

最佳答案

Javascript 没有 block 级作用域。
即使变量是在循环内定义的,它仍然是共享的。

您需要将循环体移动到一个单独的函数中。

关于javascript - 我怎么会误解这个例子中的 JavaScript 闭包解析?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5291816/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com