let/const

js里面一直以来都是用var定义变量,但是var有好几个问题经常导致一些看上去很奇怪的bug。 所以ES6里引入了letconst关键字来解决var存在的问题。

如果只需要记住一句话的话, 那就是:从此以后不要用var! 看到var先换成let,然后想想定义的变量如果是不需要改变的话,再改成const

var的问题

我们还是来说一下var存在的问题吧。首先看一下下面这段代码,你觉得会输出什么:

for(var i = 0; i < 10; i += 1) {
  setTimeout(() => {
    console.log(i);
  }, 100);
}

输出0 1 2 3 4 5 6 7 8 9?执行一下居然输出10个10! why?!!!

这就是var存在的最大的问题: 没有lexical scope。如果要用var实现输出0-9的效果的话,要这样写:

for(var i = 0; i < 10; i += 1) {
  setTimeout(((i) => {
    console.log(i);
  })(i), 100);
}

看不懂就算了,因为从此再也不需要搞这么复杂。 直接把var改成let,问题解决!

for(let i = 0; i < 10; i += 1) {
  setTimeout(() => {
    console.log(i);
  }, 100);
}

另外,var没有块作用域(block scope),所以前面两种写法,for循环结束之后i为10,而用let的话,for结束之后:i is not defined

const的作用于跟let一样,只是const定义的变量不能再修改,即是常量!

var还有很多其他问题, 如果你们有一天去面试,面试官问你关于var的问题,你就这样回答他:我们换成let怎么样?

总结

从此以后不要用var! 看到var先换成let,如果是不需要改变的话,再改成const

从此以后不要用var! 看到var先换成let,如果是不需要改变的话,再改成const

从此以后不要用var! 看到var先换成let,如果是不需要改变的话,再改成const

results matching ""

    No results matching ""