使用js变量作用域遇到的bug

for (var i = 0; child && i < child.length; i++) {            var obj = child[i];            var kind = child[i].kind;            var deiveId = child[i].id;            if (kind == "4") {//分支1                 // do sometjing            }else{//分支2                for(i in arr){                   //do something                }            }

登录后复制

以上代码产生了一个表面上看起来会很诡异的问题,就是如果kind!=4的分支2情况下,有时候会导致外层的for循环回头,即:明明最外层已经循环到child的最后一个了,跑完分支2之后,外层for循环又回头执行。

原因分析:
我想专业人士不像我这么渣的话会发现问题在for循环i,此处i并不会成为块级变量,而是for循环级,分支2中的i变化会导致外层i变化,从而导致循环回头。
js在ES6之前没有块级作用域,只分为全局作用域和函数级作用域,此处i为函数级作用域,而我们用它做循环for循环的时候其实是想当作块级作用域使用。

解决办法

想要达到块级作用域效果可以使用ES6语法的let关键字实现:

for(let i=0;i<arr.length;i++){}

登录后复制

相信看了本文案例你已经掌握了方法,更多精彩请关注【创想鸟】for循环相关文章!

推荐阅读:

for循环

for循环

以上就是使用js变量作用域遇到的bug的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2757846.html

(0)
上一篇 2025年3月8日 08:02:13
下一篇 2025年3月1日 13:31:14

AD推荐 黄金广告位招租... 更多推荐

相关推荐

发表回复

登录后才能评论