13、提升
变量var的提升
- 使用var声明的变量,它会在所有代码执行前被声明
所以我们可以在变量声明前就访问变量(不推荐,不好维护)
函数的提升
- 使用函数声明创建的函数,会在其他代码执行前被创建
所以我们可以在函数声明前调用函数
let的提升不显示
let声明的变量实际也会提升,但是在赋值之前解释器禁止对该变量的访问
<script>
console.log(b)
let b = 10
// fn()
function fn(){
alert("我是fn函数~")
}
// fn2()
// var fn2 = function(){
// }
// console.log(a)
var a = 10
// a = 10 // window.a = 10
</script>
练习
<script>
/* var a = 1
function fn(){
a = 2
console.log(a) // 2
}
fn()
console.log(a) // 2 */
// 变量和函数的提升同样适用于函数作用域
/* var a = 1
function fn(){
console.log(a) //undefined
var a = 2
console.log(a) // 2
}
fn()
console.log(a) // 1 */
// 定义形参就相当于在函数中声明了对应的变量,但是没有赋值
/* var a = 1
function fn(a){
console.log(a) //undefined
a = 2
console.log(a) // 2
}
fn()
console.log(a) // 1 */
/* var a = 1
function fn(a){
console.log(a) //10
a = 2
console.log(a) // 2
}
fn(10)
console.log(a) // 1
*/
/* var a = 1
function fn(a){
console.log(a) //1
a = 2
console.log(a) // 2
}
fn(a)
console.log(a) // 1 */
console.log(a) // 2
var a = 1
console.log(a) // 1
function a() {
alert(2)
}
console.log(a) // 1
var a = 3
console.log(a) // 3
var a = function () {
alert(4)
}
console.log(a) // 4
var a
console.log(a) // 4
</script>