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

php中世界最好的语言
Lepaskan: 2018-05-24 15:57:13
asal
1813 orang telah melayarinya
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
                }
            }
Salin selepas log masuk

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

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

解决办法

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

for(let i=0;i<arr.length;i++){
}
Salin selepas log masuk

相信看了本文案例你已经掌握了方法,更多精彩请关注php中文网其它相关文章!

推荐阅读:

css常用样式总结

Component与PureComponent使用区别详解


Atas ialah kandungan terperinci 使用js变量作用域遇到的bug. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan