js作用域for循环闭包问题

Posted jianxin1994

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了js作用域for循环闭包问题相关的知识,希望对你有一定的参考价值。

for(var i = 0;i<btnArr.length;i++)
          btnArr[i].addEventListener(‘click‘,function()
                 tabCardShow(i);
          );
    

普通的for循环,触发事件时传入的 i 的值一定是等于 btnArr.length ,i 的值停留在了循环执行完毕之后,并不符合初衷。

原因:i只作用于 for循环的作用域,所有 元素绑定时传入的都是该作用域的同一个 i 值,而 i 值停留在了循环最后一次的值上。

for(var i = 0;i<btnArr.length;i++)
            (function(i)
                btnArr[i].addEventListener(‘click‘,function()
                    tabCardShow(i);
                )
            )(i);
    

原因:闭包传入i值,相当于每次循环都创造了一个作用域,向传入了 i 值,避免了污染,循环了多少次 ,就有多少个作用域,就有多少个 i 值。

以上是关于js作用域for循环闭包问题的主要内容,如果未能解决你的问题,请参考以下文章

JS闭包以及作用域初探

js中闭包for循环

什么是闭包

JS中for循环变量作用域

js for循环会产生作用域吗

JS面试题--使用for循环打印1-10,每个数字出现的间隔约500ms