js函数声明和函数表达式的区别

 我来答
我的世界_私心
2017-10-04 · TA获得超过621个赞
知道小有建树答主
回答量:141
采纳率:81%
帮助的人:46.4万
展开全部

上述两种方式除了定义的语法不同之外,最主要的区别是函数声明具有【函数声明提升】的特点,将函数声明提升到作用域顶端,意思是在执行代码之前会先读取函数声明,也就是说可以把函数声明放在函数调用的后面。

例子1:

test();//弹出hello,因为【函数声明提升】的特点,函数调用之前,已经读取了该函数完成了声明

            function test(){
                alert("hello");
            }

例子2:

 test();//报错:Uncaught ReferenceError: test is not defined

            //因为【函数表达式】不具备提升的特点,在函数调用时,作用域中还未读取该函数的定义
            //作用域读取函数表达式是按照代码顺序读取
            var test = function(){
                alert("hello");
            }

            test();//弹出hello

例子3:

            if(condition){
                function test(){
                    alert("hello");
                }
            }else{
                function test(){
                    alert("world");
                }
            }

            //弹出world,因为函数声明在代码执行前就已经完成了,作用域已经完成了对该函数的读取,与条件无关
            //同名函数声明,后面的会覆盖前面的
            test();

            if(condition){
                var test2 = function(){
                    alert("hello");
                }
            }else{
                var test2 = function(){
                    alert("world");
                }
            }
            //弹出内容与条件相关,作用域读取函数表达式是按照代码执行顺序读取的
            test2();

例子4:

 //函数表达式
            var  test = function(){
                alert("hello");
            }
            //第一次调用
            test();

            //变量声明
            var s = "world";

            //函数声明
            function test(){
                alert(s);
            }
            //第二次调用
            test();

        //解释:两次调用都将弹出hello,在代码执行前方式二已经被作用域读取,然后执行方式一代码,方式一的test覆盖方式二的test,然后执行两次调用弹出hello
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式