举两个例子:
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