我们都知道,js是存在「变量提升」的。
关于「变量提升」,我们来看个例子:
console.log(a) // undefined var a = 1
一个变量还没被声明我们就去使用它,竟然不报错,而是返回undefined。
这就是因为「变量提升」。
我们可以把上面的代码这样来看:
var a console.log(a) // undefined a = 1
现在知道为什么打印undefined了吧。
再看个例子:
var a = 10 var a console.log(a)
你是不是觉得打印值是undefined?
不,应该是10。
为什么是10?因为变量提升:
var a var a a = 10 console.log(a) // 10
通过上面这些例子,我们就知道,用var声明的变量会出现「变量提升」的情况。
其实,不仅变量会提升函数也会被提升。
console.log(a) // f a() {} function a() {} var a = 1
对于上面代码,打印结果会是f a() {}
,即使变量声明在函数之后。
这说明了函数会被提升,且优先于变量提升。(「函数提升优先于变量提升」是说,函数提升会把整个函数挪到作用域顶部,变量提升只会把声明挪到作用域顶部)