Javascript JS IndexedDB闭包/内部函数

Javascript JS IndexedDB闭包/内部函数,javascript,indexeddb,Javascript,Indexeddb,我想理解为什么在这个“循环”中,我不能在带有闭包/内部函数的事件中附加元素的键。我知道其他循环会发生什么,比如for,而。。。我不明白在这种情况下这种方法不起作用的真正原因 问:为什么我不能直接传递钥匙 item.transaction(["itens"], "readonly").objectStore("itens").openCursor() .onsuccess = function(e) { var info =

我想理解为什么在这个“循环”中,我不能在带有闭包/内部函数的事件中附加元素的键。我知道其他循环会发生什么,比如
for,而
。。。我不明白在这种情况下这种方法不起作用的真正原因

问:为什么我不能直接传递钥匙

item.transaction(["itens"], "readonly").objectStore("itens").openCursor()
                .onsuccess = function(e) {
                    var info = e.target.result;
                    if (info) {


                        var div = document.createElement("div");
                        var img = document.createElement("img");
                        var h2 = document.createElement("h2");

                        img.src = "../imagens/misc/" + info.value.image;
                        h2.innerHTML = info.value.title;
                        div.appendChild(h2);


                        div.onclick = function() {
  //always the lasy key.
                           console.log(info.key);


                        };

                        div.appendChild(img);
                        box.appendChild(div);

                        info.continue();
                    }
                };
我知道这类解决方案是有效的

bt.onclick = (function(index) {
        return function (){console.log('iterator: ' + index);}
    })(i);  

with ({ n: i }) {
bt.onclick = function(index) {
    console.log('iterator: ' + n);
};
}

在给出的示例中,您正在为光标的每次迭代覆盖
div.onclick

如果您将其更改为:

console.log('overwriting onclick handler to log: ' + info.key);
div.onclick = function() {
  console.log(info.key);
};
或者,不要覆盖:

console.log('adding onclick listener to log: ' + info.key);
div.addEventListener('click', function() {
  console.log(info.key);
});

它们的行为会有所不同,但可能有助于您了解发生了什么。

在给定的示例中,您正在为光标的每次迭代覆盖
div.onclick

如果您将其更改为:

console.log('overwriting onclick handler to log: ' + info.key);
div.onclick = function() {
  console.log(info.key);
};
或者,不要覆盖:

console.log('adding onclick listener to log: ' + info.key);
div.addEventListener('click', function() {
  console.log(info.key);
});
这些行为会有所不同,但可能有助于您了解发生了什么