在控制台打印,最后发现console.log('5=>', a)打印出的a为1,这是为什么呢?

在控制台打印,最后发现console.log('5=>', a)打印出的a为1,这是为什么呢?

问题描述:

var a = 0;
    if(1) {
        console.log('1=>', a);
        a = 1;
        console.log('2=>', a);
        function a() {};
        console.log('3=>', a);
        a = 21;
        console.log('4=>', a);
    }
    console.log('5=>', a);

##打印结果:

因为你的 function a() {};放置的位置引起的a不同;

1.function a() {}之前的a是一个变量,a=0;a=1;

    console.log('1=>', a);
    a = 1;
    console.log('2=>', a);
    function a() {};

2.function a() {}之后的a是一个方法,这个方法等于a

   function a() {};
    console.log('3=>', a);
    a = 21;
    console.log('4=>', a); 

但是你的if(1)外面又打印了一个console.log('5=>', a);,这时候的a是一个变量来的,这时候的a就等于function a() {};之前最近的一个a=1;

举个例子,假如你在

    a = 1;
    console.log('2=>', a);
    function a() {};

这里改成,增加了一个a=2;

    a = 1;
    console.log('2=>', a);
    a = 2;
    function a() {}; 

那最后console.log('5=>', a); 会打印出a=2;

总的来说,你的a 到底是想要当成参数还是要当成方法来用,如果要当成方法,就把 function a() {};放在if(1)外面;

ps:方法名和参数的命名最好是区分开来