1、变量声明提升
在C++、java中必须先声明变量才能在后面使用这个变量,但是在JS中,无论在该作用域中的哪个位置声明变量,都会被提升到顶部,但是变量定义不会跟着提升;
console.log(person1)//undefined变量没有定义
console.log(person2)//person2 is not defined变量没有声明
var person1
var person1虽然声明在最后,但是在编译时被提升到了顶部;
var person1
console.log(person1)//undefined变量没有定义
console.log(person2)//person2 is not defined变量没有声明
这两段代码在编译后是一样的;
var person1="chen"
console.log(person1)//chen
console.log(person2)//undefine
var person2="wu"
person2声明在最后,但是由于声明提升,所以不会出现变量没有声明的错误,但是由于定义不会提升,所以person2的定义依然在最后,所以console.log(person2)运行时person2是还没有定义的;
2、函数声明提升
p()//undefine
function p(){}
p=function(){
var person1="chen"
console.log(person1)
}
function p(){
var person1="chen"
console.log(person1)
}
var p=function(){
var person2="wu"
console.log(person2)
}
p()//wu
上面两段代码说明函数声明会提升,但是函数定义不会提升,定义的时候是在哪里,编译后就在哪里;