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 =链接[link];看----- v [...]。addEventListener('click',function(){chrome.tabs.create({url:links [link] });});
另外,我必须使用(function() { })();
模式(我不知道名称),否则它也不起作用。
为什么仅在同时使用模式复制和变量复制时才起作用?请向我解释JavaScript如何以必需的方式处理变量。
for循环中没有特殊作用域,因此每次执行此操作时,变量都会被覆盖
for (var link in links) {
var href = links[link];
element.addEventListener('click', function() {
chrome.tabs.create({ url: href });
});
}
请注意,单击会在for循环完成后再发生,并且因为在for循环内没有创建新的作用域,因此变量在每次迭代时都会更改,并且在您单击元素时,href
事件处理程序回调中的变量是它被设置为的最后一个值。
真正发生的是,任何函数声明都会创建一个新的作用域,因此变量不会在每次迭代时都被覆盖,并且立即调用函数表达式就是这样的函数声明,并且由于它创建了变量,因此它使变量的值保持不变一个新的范围
for (var link in links) {
(function() { // new scope, variables inside this isn't changed on next iteration
var href = links[link];
element.addEventListener('click', function() {
chrome.tabs.create({ url: href });
});
})();
}
用var声明的变量的范围是其当前的执行上下文,它是封闭的函数,或者对于任何函数外部声明的变量,是全局的。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句