每一次面试的时候总会遇到这个问题,但是每一次都说不全面。今天就好好的总结一下♥♥
-
通过 var 关键词声明的变量没有块作用域。在块 {} 内声明的变量可以从块之外进行访问。
-
使用 let 关键词声明拥有块作用域的变量,在块 {} 内声明的变量无法从块外访问。
-
使用 var 关键字重新声明变量会带来问题,在块中重新声明变量也将重新声明块外的变量。
-
使用 let 关键字重新声明变量可以解决这个问题,在块中重新声明变量不会重新声明块外的变量。
3.循环中:
-
在循环中使用的变量使用 var 重新声明了循环之外的变量。
-
在循环中使用的变量使用 let 并没有重新声明循环外的变量。
-
如果在循环中用 let 声明了变量 i,那么只有在循环内,变量 i 才是可见的。
4.全局变量:
-
通过 var 关键词定义的全局变量属于 window 对象。
-
通过 let 关键词定义的全局变量不属于 window 对象。(undefined)
5.声明:
-
在相同的作用域,或在相同的块中,通过 let 重新声明一个 var 变量是不允许的。
-
在相同的作用域,或在相同的块中,通过 var 重新声明一个 let 变量是不允许的。
-
在相同的作用域,或在相同的块中,通过 let 重新声明一个 let 变量是不允许的。
-
在不同的作用域或块中,通过 let 重新声明变量是允许的。
6.变量提升:
-
通过 var 声明的变量会提升到顶端。
-
通过 let 定义的变量不会被提升到顶端。在声明 let 变量之前就使用它会导致 ReferenceError。
-
const 变量不能在声明之前使用。
7.const 与 let:
-
const 定义的变量与 let 变量类似,但不能重新赋值。
-
const 变量必须在声明时赋值。
-
关键字 const 有一定的误导性。它没有定义常量值。它定义了对值的常量引用。因此,我们不能更改常量原始值,但我们可以更改常量对象的属性。
-
在同一作用域或块中,不允许将已有的 var 或 let 变量重新声明或重新赋值给 const。
-
在同一作用域或块中,为已有的 const 变量重新声明声明或赋值是不允许的。
-
在另外的作用域或块中重新声明 const 是允许的。