变量提升题目:

 (function(){
            a=5
            console.log(window.a)
            var a=10
            console.log(a)

        })()
        

答案如下(还请先思考哦)

 

 //编译后
        (function(){
            var a;
            a=5;
            console.log(window.a) //undefined
            a=10;
            console.log(a)  //10
        })()

 

 

函数提升题目:

 function test(){
            console.log(1,foo);
            console.log(2,bar);
            var foo='hello'
            console.log(3,foo);
            var bar =function(){
                return 'world'
            }
            function foo(){
                return 'hello'
            }
        }
        test()

 

答案如下:

  //编译后
//函数提升优先级大于变量提升
function test(){ function foo(){ return 'hello' } var foo; var bar; console.log(1,foo); //foo(){ } console.log(2,bar); //undefined foo='hello' console.log(3,foo); //hello bar =function(){ return 'world' } } test()

 

总结:

1.对于用var声明的变量,声明会提升到其所在作用域的顶端,但赋值操作不会提升。

2.函数声明同样也会提升,这里仅限于函数声明,并不包含函数表达式。

3.如果变量名和函数名一样的话,函数提升优先级高于变量提升。

4.如果存在两个函数声明,则先出现的声明先提升,后出现的声明后提升,函数名相同的时候,后提升的会覆盖先提升的。