个人使用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