请判断以下代码的执行顺序
function fn(a){
console.log(a)
var a=2
function a(){}
console.log(a)
}
fn(1)
由于函数声明提升和var变量声明提升,以上fn代码执行顺序如下:
function fn(a){
// 函数声明提升会优先于var变量声明
function a(){}
// var变量声明提升
var a //使用var重新声明一个已经存在的变量,是无效的(会直接忽略)
// 声明提升完毕,按照行顺序执行代码
console.log(a) //此处是第一个打印,输出函数 a(){}
a = 2
console.log(a) //此处是第二个打印,输出变量值 2
}
如果是函数表达式,函数不会提升。函数表达式与其他的表达式一样,在使用前必须先赋值。
console.log(f) //undefined
var f = function (){
console.log("haha")
}
console.log(f) //function(){console.log("haha")}
上面代码等同于:
var f;
console.log(f)
f = function(){
console.log("haha")
}
console.log(f)