Hositing JS的提升魔法
一、前置知识
1.1 变量提升
问题1 变量提升提了定义吗?
<script>
alert(add)
var add=1
</script>
只提升了声明,没提升定义
等价于
<script>
var add
alert(add)
add=1
</script>
1.2 函数提升
问题2 函数提升提的是什么?
- 函数表达式?
<script>
alert(add)
var add=function(){
a=1
}
</script>
不是函数表达式
- 函数声明式
<script>
alert(add)
function add(){
a=1
}
</script>
是函数声明式
二、当变量提升和函数提升相遇
先看题
以下代码的输出是什么?
console.log(add)
function add(){
a=1
}
var add=1
答案:
ƒ add(){
a=1
}
==> 变量提升在前,函数提升在后,覆盖了变量声明 <==否则输出应该为 undefined
等价于
var add;//先变量提升(只提升 声明)
function add(){//后函数提升
a=1
};
console.log(add)
add=1