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