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

字节码77

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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

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

来自分类Dev

为什么在for循环中使用此命令复制文件的命令在bash中有效,而在zsh中却无效?

来自分类Dev

在以下javascript代码中,for循环中为什么会有6个不同的变量?

来自分类Dev

在检查“退出”字符串时,为什么我的代码没有在循环中终止?

来自分类Dev

为什么只有在while(true)循环中存在延迟时我的变量才会更新

来自分类Dev

Map.forEach,为什么删除循环中的项目有效?

来自分类Dev

为什么这段代码有效?

来自分类Dev

在while循环中重新绑定变量是否有效?

来自分类Dev

在 Javascript 中的 for 循环中返回承诺的有效方法是什么

来自分类Dev

为什么我的For Each循环这么慢?有没有更有效的方法?

来自分类Dev

当条件不满足时,为什么我的代码在我的 while 循环中运行?

来自分类Dev

JavaScript函数有效..但不能在for循环中

来自分类Dev

当我在foreach和for循环中放入变量时,为什么我的脚本停止运行

来自分类Dev

我的代码有效,但我不知道为什么

来自分类Dev

为什么我的代码在jsfiddle上有效,但在我的HTML文件上却无效

来自分类Dev

为什么此命令在我的终端上有效,但在我的代码中无效?

来自分类Dev

为什么while循环比for循环更有效?

来自分类Dev

为什么将冒号放在变量名之前是js中的有效代码?

来自分类常见问题

为什么while循环有效,但if语句不能返回我的值?

来自分类Dev

为什么while循环有效,但if语句不能返回我的值?

来自分类Dev

当我要打印输出时,为什么在for循环中定义的变量超出上限?

来自分类Dev

为什么我的“有效” JS代码不起作用?

来自分类Dev

我的代码有效,但不知道为什么(使用对象)

来自分类Dev

为什么此代码在控制台中有效,但在页面加载时无效?

来自分类Dev

为什么我的未初始化变量有效?

来自分类Dev

为什么以下do-while循环有效?

来自分类Dev

Python为什么while循环控制有效

来自分类Dev

为什么有时这段代码行之有效,有时却行不通?

来自分类Dev

有人能告诉我为什么这些 JavaScript 代码中的一个有效而另一个无效吗?

Related 相关文章

  1. 1

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

  2. 2

    为什么在for循环中使用此命令复制文件的命令在bash中有效,而在zsh中却无效?

  3. 3

    在以下javascript代码中,for循环中为什么会有6个不同的变量?

  4. 4

    在检查“退出”字符串时,为什么我的代码没有在循环中终止?

  5. 5

    为什么只有在while(true)循环中存在延迟时我的变量才会更新

  6. 6

    Map.forEach,为什么删除循环中的项目有效?

  7. 7

    为什么这段代码有效?

  8. 8

    在while循环中重新绑定变量是否有效?

  9. 9

    在 Javascript 中的 for 循环中返回承诺的有效方法是什么

  10. 10

    为什么我的For Each循环这么慢?有没有更有效的方法?

  11. 11

    当条件不满足时,为什么我的代码在我的 while 循环中运行?

  12. 12

    JavaScript函数有效..但不能在for循环中

  13. 13

    当我在foreach和for循环中放入变量时,为什么我的脚本停止运行

  14. 14

    我的代码有效,但我不知道为什么

  15. 15

    为什么我的代码在jsfiddle上有效,但在我的HTML文件上却无效

  16. 16

    为什么此命令在我的终端上有效,但在我的代码中无效?

  17. 17

    为什么while循环比for循环更有效?

  18. 18

    为什么将冒号放在变量名之前是js中的有效代码?

  19. 19

    为什么while循环有效,但if语句不能返回我的值?

  20. 20

    为什么while循环有效,但if语句不能返回我的值?

  21. 21

    当我要打印输出时,为什么在for循环中定义的变量超出上限?

  22. 22

    为什么我的“有效” JS代码不起作用?

  23. 23

    我的代码有效,但不知道为什么(使用对象)

  24. 24

    为什么此代码在控制台中有效,但在页面加载时无效?

  25. 25

    为什么我的未初始化变量有效?

  26. 26

    为什么以下do-while循环有效?

  27. 27

    Python为什么while循环控制有效

  28. 28

    为什么有时这段代码行之有效,有时却行不通?

  29. 29

    有人能告诉我为什么这些 JavaScript 代码中的一个有效而另一个无效吗?

热门标签

归档