js 变量提升(Hoisting)

212 阅读1分钟

为什么会变量提升

js和其他语言不太一样,其他部分语言会要求你先声明变量,再使用,否则会报错,这是正常的逻辑思维,如下

// 先声明函数
function getName(name){
	console.log("我的名字"+name)
}

getName('薛之谦')

而我们的javaScript不同,你可以先使用再去声明,例如

getName('薛之谦')

// 后声明函数
function getName(name){
	console.log("我的名字"+name)
}

原因呢其实就是,js在执行代码之前会有一个预编译的过程,预编译的过程会把代码中的声明进行提升

需要注意的一点是,只有声明会被提升,初始化不会被提升

变量提升示例

接下来通过几道题来展开说明 1.

console.log(myname) 
var myname = '钱钱'

输出:undefined

变量提升后的代码

var myname
console.log(myname) // undefined
myname = '钱钱'

2.函数声明提升优先于变量声明

console.log(aaa)
var aaa = 'name'
funcion aaa(){
	console.log('bbb')
}

输出 function aaa 这种情况会优先处理函数声明,如果变量名称和已经声明的函数相同,那么变量声明不会替换之前的函数