1.函数声明
每次调用函数都会返回 Function
类型的实例。
//函数声明定义方式
function 函数名称(值参数名称, 默认值参数名称 = 值, ...剩余参数名称) {
//函数体
}
//函数表达式定义方式
//命名函数
let Rectangle = function Rectangle2(值参数名称, 默认值参数名称 = 值, ...剩余参数名称) {
//函数体
};
console.log(Rectangle.name);
//输出函数名称: "Rectangle2"
//未命名/匿名函数
let Rectangle = function (值参数名称, 默认值参数名称 = 值, ...剩余参数名称) {
//函数体
};
console.log(Rectangle.name);
//输出函数名称: "Rectangle"
2.函数分类
2.1全局函数
名称 | 修饰符 |
全局函数 | —————— |
2.2成员方法
名称 | 修饰符 |
静态方法 | 用 static 修饰 |
实例方法 | 无 static 修饰 |
2.2局部函数
名称 | 修饰符 |
嵌套函数 | —————— |
3.参数分类
名称 | 修饰符 |
值参数 | —————— |
默认值参数 | —————— |
…剩余参数 | ... |
4.参数传递方式
JavaScript函数的参数在内部表现为一个数组,函数被调用时总会接收一个数组。
函数调用时传递的实参个数与函数定义时接收的形参个数无需相同。
函数调用时传递的实参类型与函数定义时默认值参数的类型无需相同。
参数的传递只支持按位置参数从左往右依次传递方式,不支持按命名参数传递方式。
实参的传递只支持按值传递方式(传递的是副本),不支持按引用传递方式(传递的是内存地址)。
参数类型 | 参数传递方式 | 描述 |
值类型 | 按值传递 | 对方法内的局部变量的修改不会反应到方法外。 |
引用类型 | 按值传递 | 对方法内的局部变量的修改会反应到方法外,新对象存储在新内存地址。 |
5.返回方式
按值返回。
6.函数作为值
函数不仅可以作为参数传递给另外一个函数,或者 还可以在函数中返回作为返回值的另一个函数。
只要满足其一,我们就可以将这种编程风格称为高阶函数风格(Higher Order Function Style),函数A称为高阶函数(Higher Order Function),函数B称为回调函数(Callback Function)。
//作为参数的函数只需要函数名称,不需要包含括号()
function 函数名称A (函数名称B) {
//函数体
}
function 函数名称A () {
return 函数名称B() {
//返回值函数体
};
}
7.箭头(Arrow)函数
零参数或多个参数需要使用括号 ()
。只有一个参数时可省略括号 ()
。
函数体为多个语句时需要使用花括号 {}
,单个表达式时可省略花括号 {}
。
let 变量名称 = (值参数名称, 默认值参数名称 = 值, ...剩余参数名称) => {
//函数体
};
8.立即调用的函数表达式
IIFE(Immediately Invokable Function Expressions)是在函数声明后立即调用的函数表达式,通常用于当函数只使用一次时。
(function() {
//函数体
})();
9.递归
一个函数可以指向并调用自身,便形成了递归。
function loop(x) {
if (x >= 10) // "x >= 10" 是退出条件(等同于 "!(x < 10)")
return;
// 做些什么
loop(x + 1); // 递归调用
}
loop(0);
10.闭包(Closure)
闭包是 JavaScript 中最强大的特性之一。JavaScript 允许函数嵌套,并且内部函数可以访问定义在外部函数中的所有变量和函数,以及外部函数能访问的所有变量和函数。
但是,外部函数却不能够访问定义在内部函数中的变量和函数。这给内部函数的变量提供了一定的安全性。
此外,由于内部函数可以访问外部函数的作用域,因此当内部函数生存周期大于外部函数时,外部函数中定义的变量和函数的生存周期将比内部函数执行时间长。当内部函数以某一种方式被任何一个外部函数作用域访问时,一个闭包就产生了。
let pet = function(name) { //外部函数定义了一个变量"name"
let getName = function() {
//内部函数可以访问外部函数定义的"name"
return name;
}
//返回这个内部函数,从而将其暴露在外部函数作用域
return getName;
};
myPet = pet("Vivie");
myPet();
原创文章,作者:huoxiaoqiang,如若转载,请注明出处:https://www.huoxiaoqiang.com/javascript/javascriptlang/4731.html