前言
写本《JavaScript简餐》系列文章的目的是记录在阅读学习《JavaScript高级程序设计(第4版)》一书时出现的各个知识点。虽是对读书的笔记和总结,但是希望它轻量、简洁、犀利,不会引起阅读疲劳,可以在碎片化时间和闲暇之余轻巧地沐浴一下知识点。每篇文章只针对一个小部分进行讲解式的梳理,来达到个人复习总结和分享知识的目的。
初始函数
函数,实际上它是对象。每个函数都是Function类型的实例,而Function也有属性和方法,跟其他引用类型一样。因为函数是对象,所以函数名就是指向函数对象的指针,而且不一定与函数本身紧密绑定。函数通常有以下四种声明方式:1.函数声明
例如像下面这样声明:function add(num1, num2) {
return num1 + num2;
}
这里要注意函数定义最后没有加分号。
2.函数表达式
函数表达式与函数声明几乎是等价的:let sum = function(num1, num2) {
return num1 + num2;
};
这里,代码定义了变量sum并将其初始化为一个函数。注意function关键字后面没有名称。这个函数可以通过变量sun来引用。像这样:sum()。注意这里的函数末尾是有分号的,与任何变量初始化语句一样。
3.箭头函数(ES6新特性)
箭头函数的定义方式如下:let sun = (num1, num2) => {
return num1 + num2;
}
4.使用Function构造函数
最后一种定义函数的方式是使用Function构造函数。这个构造函数接收任意多个字符串参数,最后一个参数始终会被当成函数体,而之前的参数都是新函数的参数。来看一下这个例子:let sum = new Function('num1', 'num2', 'return num1 + num2'); // 不推荐
不过并不推荐使用这种语法来定义函数,因为这段代码会被解释两次:第一次是将它当作常规ECMAScript代码,第二次是解释传给构造函数的字符串。这显然会影响性能。不过,把函数想象为对象,把函数名想象为指针很重要。上面这种语法很好地诠释了这个概念。