gpt4 book ai didi

lambda 函数引用封闭循环中的变量时的 javascript 作用域问题

转载 作者:数据小太阳 更新时间:2023-10-29 04:39:26 25 4
gpt4 key购买 nike

关于 stackoverflow 的第一个问题 :) 希望我不会让自己难堪......

我有一个加载相册列表的 javascript 函数,然后为每个相册创建一个列表项。列表项应该是可点击的,所以我用一个函数调用 jQuery 的 click() 。我循环执行此操作。我的问题是所有项目似乎都具有相同的点击功能,即使我尝试制作一个在每次迭代中做不同事情的新项目。另一种可能性是迭代变量在某种程度上是全局的,函数引用它。下面的代码。 debug()只是对Firebug的console.debug()的封装。

function processAlbumList(data, c) {
for (var album in data) {
var newAlbum = $('<li class="albumLoader">' + data[album].title + '</li>').clone();
var clickAlbum = function() {
debug("contents: " + album);
};
debug("Album: " + album + "/" + data[album].title);
$('.albumlist').append(newAlbum);
$(newAlbum).click(clickAlbum);
}
}

这是上面函数运行时打印的内容的抄本,之后是我点击不同项目导致的一些调试行。它总是打印“10”,这是专辑变量采用的最后一个值(有 10 个专辑)。

Album: 0/Live on radio.electro-music.com
Album: 1/Doodles
Album: 2/Misc Stuff
Album: 3/Drawer Collection
Album: 4/Misc Electronic Stuff
Album: 5/Odds & Ends
Album: 6/Tumbler
Album: 7/Bakelit 32
Album: 8/Film
Album: 9/Bakelit
Album: 10/Slow Zoom/Atomic Heart
contents: 10
contents: 10
contents: 10
contents: 10
contents: 10

有什么想法吗?把我逼上墙,这是。 :)

/斯特凡

最佳答案

你需要引入另一个作用域,比如像这样:

var clickAlbum = (function (a) {
return function () {
debug("contents: " + a)
};
})(album);

关于lambda 函数引用封闭循环中的变量时的 javascript 作用域问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2828718/

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