函数声明与表达式的区别

HTML5学堂:函数有不同的定义方法,一种是函数声明,另一种是函数表达式,那么这两种有何区别呢?

函数声明的基本语法

function functionName(arg0, arg1, ..., argn) {
    // 函数体 - HTML5学堂
}

函数声明的重要特征:函数声明提升

在执行代码之前,会先读取函数声明,这也就意味着,可以把函数声明放在调用它的语句的后面。

函数表达式的常见语法形式

var functionName = function(arg0, arg1, ..., argn) {
    // 函数体 - HTML5学堂
};

如何理解上面这段代码呢?创建一个匿名函数(也叫拉达姆函数),并将整个函数赋值给变量functionName

在执行这句代码之前,是不能够实现functionName()函数的调用的,函数表达式和其他表达式一样,都需要在使用前赋值。

经典案例

此段代码合法

var say;
if(conditions) {
    say = function () { console.log('函数表达式-代码合法'); }
} else {
    say = function () { console.log('H5course'); }
}

此段代码不合法

if(conditions) {
    function say() { console.log('函数声明-不合法代码'); }
} else {
    function say() { console.log('HTML5学堂'); }
}

拓展性知识

在使用函数声明创建函数时,对于非IE浏览器,会为函数定义一个非标准的name属性,可以通过name属性访问到给函数指定的名字。而采用函数表达式所定义的函数,name属性为空字符串。如下:

function h5course() {};
console.log(h5course.name);
var h5 = function(){};
console.log(h5.name);

此段代码中,前者会打印h5course,但是后者只会输出空字符串

写在最后的一些话:关于此方面知识的理解,会涉及到“预编译与执行”,想了解此方面知识的童鞋可以查看——>《JavaScript 运行机制之执行顺序详解》

HTML5学堂小编-利利。耗时:1.5h

原文发布于微信公众号 - HTML5学堂(h5course-com)

原文发表时间:2016-03-28

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏java工会

Java基础第一阶段知识点,招实习的面试官都在问这些

2249
来自专栏进击的君君的前端之路

面向对象、this

1243
来自专栏HTML5学堂

2016.01.07 HTML5真题练习

HTML5学堂:每天一道题,强壮程序员!今日主要涉及01.06日,数组操作题目的解答,以及一道涉及数组拼接的题目。 HTML5真题【2016.01.06】答案解...

2725
来自专栏Java大联盟

Java基础之数组

1213
来自专栏AILearning

对==与equals的比较的理解

举例: String s1 = "abc"; String s2 = new String("abc"); String s3 = new String("ab...

1845
来自专栏技术之路

c++多重继承小结

如果一个类从两个不同的类里继承两个同名的成员,则需要在派生类中使用类限定符来区分他们。 即在从A和B派生出来的c类中使用a::Show()和B::Show()来...

1817
来自专栏逻辑熊猫带你玩Python

Python | 6大数据类型方法归纳总结(下)

可以直接使用list()创建一个新的列表,或者,使用list()将一个对象转换成列表。

2163
来自专栏Android 研究

Retrofit解析3之反射

反射主要是指程序可以访问、检测和修改它本身状态或行为的一种能力。在计算机科学领域,反射是一类应用,它们能够自描述和自控制。这类应用通过某种机制来实现对自己行为的...

1652
来自专栏西安-晁州

js数组去重

对于如下对象数组 [{id: 0, name: "name1"}, {id: 1, name: "name2"},{id: 1, name: "name2"},...

2700
来自专栏逻辑熊猫带你玩Python

Python | 6大数据类型方法归纳总结(中)

可以直接使用tuple()创建一个新的元组,或者,使用tuple()将一个对象转换成元组。

1734

扫码关注云+社区

领取腾讯云代金券