在同一个作用域中,函数和变量同名的情况下,函数的优先级高,会将变量覆盖,与位置无关,不管谁在前,谁在后, 都会被函数覆盖函数的声明提前会将整个函数一起提前
声明提前,先声明变量,在声明函数当函数和变量同时声明提前时,函数会覆盖变量,而这里之所以不会被变量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