我可以在以下代码中看到一个问题:
var elems = {
'elem1': 'param1fds',
'elem2': 'paramaafds2',
'elem3': 'paramfdsfd3fdsfds'
};
for (var k in elems) {
$('#' + k).click(function(e) {
// k is always elem3 when I click on the element
// elems[k] == 'paramfdsfd3fdsfds'
当代码执行时,k
等于 elem3
。我该如何处理?
最佳答案
标准通用解决方案是添加 IIFE在闭包中保护变量:
for (var k in elems) {
(function(k){
$('#' + k).click(function(e) {
// k is always elem3 when I click on the
})
})(k);
}
当您使用 jQuery 时,您还可以使用 $.each
:
$.each(elems, function(k){
$('#' + k).click(function(e) {
第三种解决方案是使用 on
并提供数据
:
for (var k in elems) {
$('#' + k).on('click', {k:k}, function(e) {
// use e.data.k here
在不久的将来,在 ES6 中,第四种解决方案将是使用 let
的 block 作用域变量。 :
for (let k in elems) {
$('#' + k).click(function(e) {
// k is OK
关于javascript - 让js闭包立即执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30305022/