首先,我们需要一点点的知识储备
1全局作用域:当你不使用关键字进行声明的时候,就是全局变量。这个比价好理解
2函数作用域:在函数范围内使用的变量
3块级作用于,在{}范围内使用的变量。我会把块级作用域和函数作用域搞混。
块级作用域是在例如
if(){
}
或者是
for(){
}
这种是块级作用域
4函数提升和变量提升
就是js在进行编译的时候,会把var申明的变量提高到最前面。函数也会提到最前面。让所用使用这个函数的,不至于会找不到它
let,块级作用域
var,函数作用域,可以跨级作用域,会进行变量提升(在函数内或者是在当前的上下文中),可以重复声明
const,块级作用域,不可改变值,声明的变量为常量
有一个经典的题目,知识点是var跨块级作用域,let的作用于范围只是块级作用域名
for(var i = 0 ; i<10;i++){
setTimeout(){
console.log(i)
}
}
进行解析一下
var i = 0;
{
var temp = i;
console.log(i)
}
i++;
{
var temp = i;
console.log(i)
}
i++;
......
现在看起来就比较的明显了,因为var是可以跨块级作用域的,而且它是可以重复声明的,所以这个temp看起来声明了很多次,但实际上它只是一个变量而已