变量、函数声明提升

举两个例子:

1.上下两个对比

1    var foo = 1;  
2    function bar() {
3        foo = 10;
4        return;
5    }
6   
7    bar();
8    console.log(foo);   //10
 1    var foo = 1;  
 2    function bar() {
 3        foo = 10;
 4        return;
 5        function foo() {
 6        }
 7    }
 8  /*
 9    //由于函数声明在当前作用域中提升,解析顺序相当于下面,所以函数内部foo为局部变量
10    function bar() {
11        function foo() {
12        }
13        foo = 10;
14        return;   
15    }
16  */  
17    bar();
18    console.log(foo);   //1

2.

 1   function bar() {
 2        return foo;
 3        foo = 10;
 4        function foo(){
 5        }
 6        var foo = 11;
 7    }
 8  /*  
 9    function bar() {
10        var foo;  //注意函数声明与变量声明都被提前,但是函数声明的优先级大于变量的声明
11        function foo(){
12        }
13        return foo;
14        foo = 10;   
15        foo = 11;
16    }
17  */  
18    console.log(typeof bar());  //function
原文地址:https://www.cnblogs.com/webliu/p/4714774.html