当我在for循环中复制变量时,为什么我的JavaScript代码有效

时间:2015-05-01 21:58:30

标签: javascript variables for-loop

Google Chrome扩展程序的JavaScript代码。

它有效,但我想知道一件事。它位于for循环中,迭代关联数组并在Chrome函数中使用其值。

这很好用:

var links =
{
    apps: 'chrome://apps/',
    bookmarks: 'chrome://bookmarks/',
    history: 'chrome://history',
    ...
};

for (var link in links)
{
    (function()
    {
        var href = links[link];
        document.querySelector('#' + link).addEventListener('click', function() { chrome.tabs.create({ url: href }); });
    })();
}

但是经过一些更改,它突然没有(突出显示更改)

var href = links[link];                                            Look  -----v
[...].addEventListener('click', function() { chrome.tabs.create({ url: links[link] }); });

此外,我必须使用(function() { })();模式(我不知道名称),否则它也不起作用。

问题

为什么这只在使用模式和变量复制时才有效?请向我解释JavaScript如何以需要这些装置的方式处理变量。

1 个答案:

答案 0 :(得分:1)

为了补充adeneo的答案,这个article解释了闭包,特别是外部函数变量值范围发生变化的场景。