前言
最近在学 JavaScript 对其的函数声明的几种方式有很大的兴趣, 思考了一些东西, 所以就写下这篇博客来记录, 可以说 函数是 JavaScript 中最有趣的东西了. 据说 Brendan Eich 在创造它时, 比较中意的是函数式, 但他当时的公司在于 sun 合作, 所以希望他把 JavaScript 整的像 Java 一点, 并取名为 JavaScript. 但与 Java 并没有什么关系. 在其风格上看, 个人认为更像是 C 风格的函数式脚本语言.
在 JavaScript 中所有的一切都是对象, Object 是一个基础类型, 而 Function 类型是引用 Object 类型继承而来的, 函数作为 Function 类型的实例, 也是对象.
众所周知, 在 JavaScript 中有三种方式来定义函数, 但其实是四种, 另一种是使用命名函数表达式来定义函数, 这种方式很少用到.
第一种: 函数声明的方式来定义
这种方式和其他语言也没多大区别, 和其他语言的形式一样, 使最常见的一种方式.
其语法格式如下:1
2
3function 函数名(形参1, 形参2, ...) {
//函数体
}例:
1
2
3function add(num1, num2) {
return num1 + num2;
}第二种: 函数表达式来定义
其语法格式如下:
1
2
3var 变量名 = function(形参1, 形参2, ...) {
//函数体
};例:
1
2
3var add = function(num1, num2) {
return num1 + num2;
};这种方式需要在结尾加上一个分号, 因为我们相当于把一个函数赋给一个变量, 也就是相当于一条表达式语句. 并且在 function 后没有再跟函数名, 这种情况下所创建的函数又称匿名函数(拉达母函数). 通过赋给的这个变量名即可调用这个函数.
关于函数声明和函数表达式的区别个人暂时认为主要有两种:
- 解释器对二者的区别
JavaScript有一个特性就是:变量声明和函数声明会被提前(hoist)到作用域的顶端,所以通过函数声明创建的函数,什么时候都可以被调用,但是通过函数表达式创建的函数,只能在创建时才能调用.