// 变量var num = 12;let age = 24;// 常量const PI = 3.14;
| 块级作用域 | 重复定义 | 变量提升 | 作用域链 | |
|---|---|---|---|---|
| var | 无 | 有 | 有 | 有 |
| let | 有 | 无 | 无 | 有 |
| const | 有 | 无 | 无 | 有 |
作用域
全局作用域
在.js文件或者<script>标签中为全局作用域
局部作用域
在函数内部,循环,判断结构中为局部作用域
作用域链
内部作用域中的变量访问当前作用域如果没有该变量,则一层一层查找外层作用域中的变量,一层一层向上为作用域链
预解析
预解析会把 js 里面所有的 var 和 function 提升到当前作用域的最前面
预解析分为:变量预解析(变量提升)和函数预解析(函数提升)
变量提升
console.log(num); // undefinedvar num = 10;
先收集var定义的变量或者函数,然后运行到变量赋值的位置时,该变量才会有值
函数提升
fun();function fun() {console.log('可以先使用再声明');}
先收集 function 定义的函数,然后运行到调运函数的位置时,该函数才会被调用
var fun = function () {}// 表达式定义的函数不能在定义前使用
