函数定义
函数声明
fn(); // function
function fn() {
console.log('function');
}
函数表达式
// 变量声明
var a = 20;
// 实际执行顺序
var a = undefined; // 变量声明,初始值undefined,变量提升,提升顺序次于function声明
a = 20; // 变量赋值,该操作不会提升
匿名函数
var a = 10;
var fn = function(bar, num) {
return bar() + num;
}
fn(function() {
return a;
}, 20)
自执行函数
(function() {
// 私有变量
var age = 20;
var name = 'Tom';
// 私有方法
function getName() {
return `your name is ` + name;
}
// 共有方法
function getAge() {
return age;
}
// 将引用保存在外部执行环境的变量中,形成闭包,防止该执行环境被垃圾回收
window.getAge = getAge;
})();
函数自执行的方式另外还有其他几种写法,诸如!function(){}(),+function(){}()
函数参数
1.显式参数:形参、实参
2.隐藏参数(arguments)
3.默认参数
4.参数传递方式:值传递
函数调用
1.作为一个函数调用
function myFunction(a, b) { return a * b;}myFunction(10, 2); // myFunction(10, 2) 返回 20
2.函数作为方法调用
var myObject = { firstName:"John", lastName: "Doe", fullName: function () { return this.firstName + " " + this.lastName; }}myObject.fullName(); // 返回 "John Doe"
3.作为构造函数调用
// 构造函数:function myFunction(arg1, arg2) { this.firstName = arg1; this.lastName = arg2;}// This creates a new objectvar x = new myFunction("John","Doe");x.firstName; // 返回 "John"
4.call/apply调用
函数重载
可以通过arguments对象来模拟实现一个函数重载的功能。
function fn(a){
if(arguments.length === 1){
console.log(1)
}else{
console.log(2)
}
}
fn(1) // 1
fn(1,2) // 2
函数扩展
函数式编程
JavaScript并不是一门纯函数式编程的语言,但是它使用了许多函数式编程的特性。
函数式编程特征
1.函数是第一等公民
2.只用"表达式",不用"语句"
3.纯函数(没有"副作用")
4.不修改状态
5.引用透明性