有没有想过什么时候使用三者之一?为什么要引入其他两个到JavaScript中呢?让我们尝试得到一些答案:
1. var关键字
我正在做一个假设,你知道如何循环工作。猜一猜,第一个控制台日志打印的值是多少,第二个呢?
第一个将打印出0到9的值,然后最后一个控制台日志将打印值10.这是因为i在for循环之外仍然有效 - 范围i不受大括号{}限制。那么这个怎么样:
这次打印什么?
var es5中的变量在函数中有作用域,这意味着变量在函数中是有效的,而不在函数本身之外。上面的代码因此输出与前一个相同的结果。有了这些信息,下一个代码的输出是什么?
正确的最后一个console.log有一个错误,说明i=undefined
因为i范围限制在function本身,所以i 只在打印
最后一件事,你有没有看过这样的JavaScript代码:
这是试图将变量保持在函数的范围内,这通常被称为 immediately invoked function expression.
玩这个就爆炸了,所以es6就用新的写法处理了这个爆炸的玩法。
2.let关键字
它是对var变量中不可控的解决方案。这些变量的范围在大括号,{}所以在这种情况下,你可以猜测发生了什么
它将打印0-9,然后抛出一个引用错误,因为i不在大括号之外的范围内
3.const关键字
你有没有想要改变的价值,或永远不会改变?像数学pi的值,他们可以被分配到const
JavaScript。Const实际上意味着一旦变量被分配了,它就不能被再次赋值,并且试图这样做会抛出一个错误
让我们考虑一下我们可以使用常量的情况,比如说我们想把折扣应用到一系列数字上,而且我们不希望这个折扣在任何其他点上被改变
const multiplier = 3.4
discount = 5.6 //这会抛出一个错误
[23,56,67] .map((num)=> num * discount)
=>
map函数里面的漂亮箭头叫做箭头函数,我在这里写了一些东西
在这种情况下可能会发生什么
const dog = {
age:3
}
dog.age = 5
dog = {name:'biko'}
const不会使变量不可变,因此dog.age
会改变狗对象的年龄属性。最后一条语句会抛出一个错误!
猜猜这里发生了什么
结论
总是使用let尽量避免范围混乱,这是知识点。
注意:本文归作者所有,未经作者允许,不得转载