JavaScript-变量提升与函数声明提升
1. 变量提升
代码:
console.log(a) // undefined
var a = 1
在这段代码中,在声明a这个变量之前直接打印a的值,输出的是undefined,而undefined说明a已定义,但尚未赋值。这说明在log输出之前我们的a就已经被声明过了。这就是变量提升。
伪代码:
var a
console.log(a)
a = 1
2. 函数声明提升
代码:
fn()
function fn() {
console.log('hello')
}
在代码顺序中,fn()调用是写在fn函数声明之前的,且代码成功执行输出了hello,这说明我们的函数声明也存在提升。
那如果是这样定义函数呢?
fn2()
var fn2 = function() {
console.log('fn2-test')
}
这里的fn2能执行吗?答案是不能。报错:fn2 is not a function
总结:只有直接通过function声明的函数才有变量提升。
3. 总结
-
通过
var声明的变量存在变量提升,在定义语句之前就能访问到,且值为:undefined。 -
通过
function声明的函数存在变量提升,且值为当前函数的内容。
4. 练习
say()
var name = 'A'
function say() {
console.log(name)
}
say()
以上代码如何输出?第一个say输出undefined,第二个say输出A
伪代码:
var name
function say() {
console.log(name)
}
say() // undefined
name = 'A'
say() // A
浙公网安备 33010602011771号