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中函数表达式与函数声明的区别的更多相关文章

  1. js中 函数声明/函数表达式/匿名函数/箭头函数/立即执行函数

    函数声明: function add(a, b) { // ... } 1.顾名思义,声明一个函数, 用关键字 “function” 来告诉,这是一个函数. 2.任何地方,想用就可以拿过来使用 函数表 ...

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

    我们已经知道,在任意代码片段外部添加包装函数,可以将内部的变量和函数定义"隐 藏"起来,外部作用域无法访问包装函数内部的任何内容. 例如: var a = 2; function ...

  3. js基础:函数表达式和函数声明

    函数表达式和函数声明的区别.实际上,解析器在向执行环境中加载数据是,对函数表达式和函数声明并非一视同仁.解析器会率先读取函数声明,并使其在执行任何代码之前可用.而函数表达式,则必须等到解析器执行到它所 ...

  4. JS中的几种函数

    函数可以说是js中最具特色的地方,在这里我将分享一下有关函数的相关知识: 包装函数:        (function foo(){...})作为函数表达式意味着foo只能在...所代表的位置中被访问 ...

  5. 【repost】js中(function(){…})()立即执行函数写法理解

    摘要: javascript和其他编程语言相比比较随意,所以javascript代码中充满各种奇葩的写法,有时雾里看花,当然,能理解各型各色的写法也是对javascript语言特性更进一步的深入理解. ...

  6. js中(function(){…})()立即执行函数写法理解

    文章摘自https://my.oschina.net/u/2331760/blog/468672?p={{currentPage+1}} 摘要: javascript和其他编程语言相比比较随意,所以j ...

  7. js中(function(){…})()立即执行函数写法理解(转载oschina)

    ( function(){…} )()和( function (){…} () )是两种javascript立即执行函数的常见写法,最初我以为是一个括号包裹匿名函数,再在后面加个括号调用函数,最后达到 ...

  8. 第七章 函数表达式和函数声明,关于this对象 ,私有作用域(function(){})() ,私有变量和特权方法

    一:函数表达式和函数声明 1:函数声明和函数表达式的区别 ①函数声明不需要分号结尾 ②函数声明有函数提升的特点 ③函数声明后面不能跟圆括号直接调用,因为javascript将function关键字当作 ...

  9. 深入理解js中的立即执行函数(function(){…})()

    javascript和其他编程语言相比比较随意,所以javascript代码中充满各种奇葩的写法,有时雾里看花,当然,能理解各型各色的写法也是对javascript语言特性更进一步的深入理解. ( f ...

随机推荐

  1. [原]VS2012编译GLEW 1.11

    1.到http://glew.sourceforge.net/下载源代码 2.使用vs2012打开build下vc6的glew.dsw ,自动生成2012工程(一路点确定)特别注意:不要使用build ...

  2. orcal数据库基本操作

    1.连接 SQL*Plus system/manager 2.显示当前连接用户 SQL> show user 3.查看系统拥有哪些用户 SQL> select * from all_use ...

  3. centos7设置时间和时区

    1.安装ntp服务软件包:yum install ntp 2.将ntp设置为缺省启动:systemctl enable ntpd 3.修改启动参数,增加-g -x参数,允许ntp服务在系统时间误差较大 ...

  4. python-docx 设置标题heading的中文字体类型+设置正文的中文字体类型

    依赖包: from docx import Document from docx.shared import Pt from docx.shared import Inches from docx.o ...

  5. 二进制安装mysql

    1.1 MySQL安装介绍 mysql软件下载地址信息: www.mysql.com   mirrors.sohu.com mysql软件下载完毕后,查看mysql解压后目录文件大小 1.下载解压my ...

  6. easyui---tree异步加载

    1.ul li的多级列表的html代码tree 2.利用jquery <ul id="tt"></ul> $('#tt').tree({ url:'tree ...

  7. ubuntu登录时出现“一闪之后回到登录界面”的现象

    ubuntu登录时出现“一闪之后回到登录界面”的现象 虚拟机vmware 12.5.6 build-5528349 操作系统ubuntu 18.04 问题:登录时出现一闪之后回到登录界面的现象 解决方 ...

  8. [No0000134]C#中的委托,匿名方法和Lambda表达式

    简介 在.NET中,委托,匿名方法和Lambda表达式很容易发生混淆.我想下面的代码能证实这点.下面哪一个First会被编译?哪一个会返回我们需要的结果?即Customer.ID=5.答案是6个Fir ...

  9. Python:正则表达式

    学习内容参考:Python正则表达式指南 匹配流程 语法表

  10. Flink - ShipStrategyType

      对于DataStream,可以选择如下的Strategy, /** * Sets the partitioning of the {@link DataStream} so that the ou ...