美文网首页
Javascript变量提升和函数提升

Javascript变量提升和函数提升

作者: 肆意咯咯咯 | 来源:发表于2018-04-03 18:29 被阅读0次

    Javascript引擎的工作方式是:先解析代码,获取所有被声明的变量,然后再一行一行的运行。

    一.变量提升
    在Es6之前,JavaScript没有块级作用域,只有全局作用域和函数作用域,变量提升即将变量声明提升到它所在作用域的最开始的部分。
    首先举一个简单的例子:
    console.log(b);//undefined
    var b =1;
    console.log(b);//1
    

    首先使用console.log方法在控制台显示变量b。这个时候变量B还没有声明和赋值,但不会报错,因为存在变量提升,先将变量B的声明提升到了最开始的地方;

    var b;
    console.log(b);//undefined
    b =1;
    console.log(b);//1
    
    举例二:
    var a = 5;
                function foo(){
                    a = 2;
                    console.log(a);
                    var a;
                }
                foo();//2
    

    在函数内解析编译时,“var a”因为变量提升被提前了,所以我们看到的是内部变量a,而不是外面已经赋值的外部变量5;

    举例三:
    var a=5;
                function foo(){
                    console.log(a);
                    var a = 2;
                }
                foo();//undefined
    
    二.函数提升
    js创建函数存在两种方式:函数声明和函数表达式,只有函数声明存在函数提升;
    //函数声明
    function myTest(){
                    foo();
                    function foo(){
                        alert("我来自foo");
                    }
                }
                myTest();//我来自foo
    //函数表达式
    function myTest(){
                    foo();
                    var foo = function(){
                        alert("我来自foo");
                    }
                }
                myTest();//TypeError:foo is not a function;
    

    总结:关于变量提升和函数提升的问题大概就这些,可以多做一些练习;

    (function() {  
                    console.log(a);    //undefined  
                    a = 'aaa';  
                    var a = 'bbb';  
                    console.log(a);    //'bbb'
                })();
    
    console.log(f1()); //undefined
                console.log(f2);   //undefined
                function f1() {console.log('aa')}  //aa
                var f2 = function() {}
    

    相关文章

      网友评论

          本文标题:Javascript变量提升和函数提升

          本文链接:https://www.haomeiwen.com/subject/avbecftx.html