变量提升
function a(){
console.log(v);
var v = 'sa';
}
a();//输出是undefined,而不是v is not defined,是因为变量v提升到了该作用域顶部
复制代码
等同于下面代码
function a(){
var v;
console.log(v);
v = 'sa'
};
复制代码
函数提升
1、函数声明
console.log(a);//ƒ a(){},函数会整体提升到作用域顶部
function a(){}
复制代码
2、函数字面量声明
console.log(a);//undefined,该声明方法和定义变量类似,不会整体提升
var a = function test (){}
复制代码
变量和函数同名,哪个提升优先级高?
console.log(a);//ƒ a(){}
function a(){}
var a = '123';
console.log(a);//123
复制代码
等同于
function a(){};
var a;//这里只是声明语句,不会覆盖前面定义的函数a
console.log(a);
a = '123';//覆盖之前的a
console.log(a);
复制代码