var let const 都有声明提升,但是有差别
-
var:声明提升,默认值是 undefined, 赋值之前可以用
-
let/const: 声明提升, 默认值是 undefined, 赋值之前`不能用`-- 处于 `暂存死区` 状态
-
let /const 声明的变量存储在 与 window 同级别的脚本区 ,没有全局污染
-
let: 不允许变量重名
-
var重名会覆盖——不好, 所以let不允许重名
全局变量污染
-
var: 声明的变量存储在
声明时
所在的作用域中-
在 script 中直接声明变量, 存储在 window 对象中
-
由于var在全局声明变量, 自定义的变量存储在window作用域中, 污染了系统提供的 window对象
-
同名会覆盖 window 中原有属性
-
-
在 函数 中声明变量, 存储在函数的作用域里
-
-
let/const
-
ES6提供的新语法: 在 script中声明的变量, 存储在独立的 脚本区, 与window全局区同级别
-
因为独立存储在其他对象中, 所以不会对 window 产生污染
-
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
</head>
<body>
<!--
var let const 都有声明提升, 但是有差别
var: 提升后默认值是 undefined, 可以用
let/const: 提升后默认值是 undefined, 但是 不可以用
-- 处于 `暂存死区` 状态, 有但不能用
-->
<script>
console.log(aa) // undefined
console.log(ab) // 报错: 暂存死区, 有但是不能用
console.log(ac) // 报错: 暂存死区, 有但是不能用
var aa = 99
let ab = 100
const ac = 101
</script>
</body>
</html>