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