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. 总结

  1. 通过var声明的变量存在变量提升,在定义语句之前就能访问到,且值为:undefined。

  2. 通过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
posted @ 2021-07-14 18:11  北诗远  阅读(51)  评论(0)    收藏  举报