JS中函数表达式与函数声明的区别

Posted 全凭一口仙气儿活着

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JS中函数表达式与函数声明的区别相关的知识,希望对你有一定的参考价值。

     hello,沐晴又来更新啦,今天呢,跟大家讲讲让人头疼的函数表达式和函数声明,反正我当初看那本高级程序的时候,是没怎么看太透,哈哈。我是个比较重基础的人,跟我一起探讨函数表达式和函数声明的世界吧。

首先呢,先看看他们的颜值:

  函数声明:function 函数名(){}

  函数表达式:function 函数名(可写可不写)(){};

 (不写名叫做匿名函数表达式。写名叫做命名函数表达式。推荐用匿名的。)

这么一看长的好像没啥区别,反正颜值也都不高。那么我们如何区别是函数表达式还是函数声明呢?答案就是看上下文,何谓上下文,你懂的,就像语文作文里面的上下文。

函数声明:function aaa(){} (这种就是函数声明,上下文啥也木有。)

函数表达式
var a = function aaa(){} : 命名函数表达式
var a = function (){} :匿名函数表达式
(function aaa(){}) : 表达式
位运算符:
~funtion aaa(){} : 表达式
-funtion aaa(){} : 表达式
+funtion aaa(){} : 表达式
!funtion aaa(){} : 表达式

(有上面的这些表现形式的都是函数表达式)

OK,看了表现上的不一样,我们已经知道如何区别他们了,下面就来了解一下他们真正在使用上的区别

1 函数表达式可以直接后面加括号执行 而函数声明是不可以。

function aaa(){}(); // 不可以执行。必须得通过函数名调用 aaa();
var a = function aaa(){} (); // 加括号就可以直接执行  

2 函数声明可以提前被解析出来。表达式不可以。

比如,只要你声明过函数,不管函数是在哪个位置声明的,它都会被提前解析出来,所以在任何地方调用都不会有问题。但是函数表达式不会被提前解析,所以你能在函数表达式之前就调用它。(关于解析机制,下篇我会认真的写出来分享给大家。)

aaa(); //可以调用

a(); //调用会出错

function aaa(){}; // 函数声明
var a = function aaa(){}; // 函数表达式

 

主要的就是这两方面的区别,相对于函数声明,表达式可以让我们不用费劲想那么多函数名,代码也更简单,等到我写闭包的时候,会体现它的优点。

 

好的,今天的探讨就到这里了,如有错误,欢迎指正。我是沐晴。下篇不见不散。

 

以上是关于JS中函数表达式与函数声明的区别的主要内容,如果未能解决你的问题,请参考以下文章

javascript函数篇函数声明提升

javascript 函数声明和函数表达式

函数声明与函数表达式的区别

js 立即执行函数

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

js中创建函数的三种方式及区别