函数提升 和 变量提升的区别
注意:函数提升的优先级大于变量提升的优先级,即函数提升在变量提升的前面
1. 变量提升
使用var 定义的变量才有变量提升的现象 ,把所有 var 声明的变量提升到当前作用域的最前面;只提升声明 ,不提升赋值;
<script>
// var num var定义的变量提升 注意:只会提升声明 , 不提升赋值 就是undefined
console.log(num + '件') // undefined件
var num = 10 // 把var num 放到代码最前面 ,不提升赋值
</script>
2. 函数提升
会把所有的函数声明提升到当前作用域的最前面 , 注意:只提升函数声明 , 不提升函数调用;
2.1 普通函数声明
<script>
// 在函数声明前调用不会报错 函数声明被提升到最前面了
fn()
function fn() {
console.log('普通函数提升') //普通函数提升
}
</script>
2.2 函数表达式
函数表达式没有函数提升
<script> // 函数表达式 算是变量提升的一种 即 var fn 使用 fn() 就会报错 fn() // fn is not a function var fn = function () { // 把函数当作值 , fn 当作变量 console.log('函数表达式没有函数提升') } </script>