在同一个作用域中,函数和变量同名的情况下,函数的优先级高,会将变量覆盖,与位置无关,不管谁在前,谁在后,
都会被函数覆盖
函数的声明提前会将整个函数一起提前
声明提前,先声明变量,在声明函数
当函数和变量同时声明提前时,函数会覆盖变量,而这里之所以不会被变量a=10覆盖,是因为其本身就是变量
函数的形参也会有声明提前,而因为声明和赋值位置不在一起,所以在这里,才会被函数a覆盖
num(a=20) 只有当变量的声明和赋值位置在一起的时候,才不会被同名的函数覆盖
函数的形参也会有声明提前,而因为声明和赋值位置不在一起,所以在这里,才会被函数a覆盖
function num(a){
console.log(a);//function
var a = 10 //这条语句和第一个输出语句里的a没有关系
function a(){
console.log('hello word');
}
console.log(a);//10
}
num(20)
//num(a=20) 只有当变量的声明和赋值位置在一起的时候,才不会被同名的函数覆盖
function num(a = 20){
console.log(a);//function
var a = 10 //这条语句和第一个输出语句里的a没有关系
function a(){
console.log('hello word');
}
console.log(a);//10
}
num()
function num(a){
console.log(a);//function
function a(){
console.log('hello word');
}
}
num(20)
function num(a){
console.log(a) //20
var a = 10
}
num(20)
这里之所以不会被变量a覆盖,是因为形参a和局部变量a同时变量提前。但是实参传进来比a=10这条语句执行的早,
所以这里输出a时a=20