个人使用var在项目中遇见的问题
1.在for循环中使用var会有问题

当使用同步的时候,var还会正常执行
但是只要只用了异步,就会出现严重的问题

当我使用异步的时候他的结果,都变成了3

但是,不在异步中的还是可以正常得到我们想要的结果。
为什么会出现这个问题呢?
- var没有块级作用域,他只有函数作用域,也就是说var只有在
function内部才有作用域的概念,其他地方则没有这个概念。这意味着在函数functioin以外用var定义变量的是同一个,你所有的修改都是针对他本身的。
相当于这个for循环一直是针对这一个全局的一个var做的修改 - for虽然循环了三次,但是循环变量一直是一个,并不是三个独立的
i。同时是因为事件处理函数是异步的,同步会先执行完毕在执行异步代码,所以循环完的结果是3,然后再按顺序执行,因为获取的都是同一个值,所以他执行的结果都是3
还有哪里会遇见这个问题?
在if判断中
- 判断 b 是否 挂载在全局上
如果不是挂在到全局上的就进入判断 - 但是呢,我这个判断是
ture是进入不了if判断中的但是我的b还是不会报错

这就是没有块级作用域的问题
如何解决这个问题
说白了就是利用let,制造独立空间,让每个i都是独立的。
for循环

if判断

总结
es6 语法 2015 年 6 月都推出了,还用var干什么啊,大佬勿喷新手慎用。
真爱生命远离var

本文探讨了在JavaScript中使用var关键字时遇到的问题,特别是在for循环和异步操作中。由于var没有块级作用域,导致在异步环境中可能会出现预期之外的结果。例如,在异步回调函数中,所有循环的var变量实际上引用的是同一个全局变量,而非独立的局部变量。同样,在if判断中,var也会引发类似问题。解决这个问题的方法是使用let关键字,它在块级作用域内创建独立的变量。作者建议开发者尽量避免在新的代码中使用var,转而采用更现代的ES6语法,如let和const,以避免作用域相关的问题。

3264

被折叠的 条评论
为什么被折叠?



