使用 let in 循环而不是 var(单击处理程序示例)

假设我们需要为每个 loadedData 数组添加一个按钮(例如,每个按钮应该是一个显示数据的滑块;为了简单起见,我们只是提醒消息)。有人可能会尝试这样的事情:

for(var i = 0; i < loadedData.length; i++)
    jQuery("#container").append("<a class='button'>"+loadedData[i].label+"</a>")
        .children().last() // now let's attach a handler to the button which is a child
        .on("click",function() { alert(loadedData[i].content); });

但不是警报,每个按钮都会导致

TypeError:loadedData [i]未定义

错误。这是因为 i 的范围是全局范围(或​​函数范围)和循环后的 i == 3。我们需要的不是“记住 i 的状态”。这可以使用 let 来完成:

for(let i = 0; i < loadedData.length; i++)
    jQuery("#container").append("<a class='button'>"+loadedData[i].label+"</a>")
        .children().last() // now let's attach a handler to the button which is a child
        .on("click",function() { alert(loadedData[i].content); });

使用此代码测试 loadedData 的示例:

    var loadedData = [
        { label:"apple",      content:"green and round" },
        { label:"blackberry", content:"small black or blue" },
        { label:"pineapple",  content:"weird stuff.. difficult to explain the shape" }
    ];

一个小提琴来说明这一点