目录
- 什么是函数
- 函数的定义
- 函数的声明
- 函数表达式
- 函数的特点
- 函数的调用
- 函数调用的语法
- 函数调用的特点
- 函数的参数
- 为什么要有参数
- 带参数的函数声明
- 带参数的函数调用
- 形参
- 实参
- 函数的返回值
- 什么叫返回值
- 用什么返回一个返回值
- 声明一个带返回值的函数
- 用变量接受函数的返回值
- 返回值详解
- arguments的使用
- 其他函数
- 匿名函数
- 自调用函数
- 函数是一种数据类型
- 函数作为参数时
- 函数作为返回值时
脑图请戳☟[http://naotu.baidu.com/file/ea908fd3de13189fdc91c60b15256a5b?token=7c52e9f1f081f7fd]
什么是函数
函数是一段有特定功能的代码,可以通过函数名进行重复调用
函数的定义
函数的声明
语法结构
founction 函数名(){
// 函数体 ---- 一段代码
}
函数表达式
语法结构
var 变量名 = function 函数名(){
//函数体
}
函数的特点
- 函数只是声明的时候,函数体并不会执行。只有函数被调用的时候,函数体内的代码才会被执行。
- 函数一般都是用来干一件事,所以一般用动词来给函数名命名。
函数调用
函数调用语法
函数名();
案例: 求1-100之间所有数的和
function getSum() { //函数声明
var sum = 0;
for (var i = 1; i <= 100; i++) {
sum += i;
}
console.log(sum);
}
getSum();//函数调用
函数调用的特点
- 函数体只有在调用的时候才会执行,调用需要()进行调用
- 可以调用多次(重复使用)。
函数的参数
为什么要有参数
- 函数内部是一个封闭的环境,可以通过参数的方式,把外部的值传递给函数内部
带参数的函数声明
function 函数名(形参1, 形参2, 形参3,... ){
//函数体
}
带参数的函数调用
function 函数名(实参1, 实参2, 实参3,...);
形参(形式参数)
- 在声明一个函数的时候,为了函数的功能更加灵活,有些值是固定不了的,对于这些固定不了的值。我们可以给函数设置参数。这个参数没有具体的值,仅仅起到一个占位置的作用,我们通常称之为形式参数,也叫形参。
实参(实际参数)
- 如果函数在声明时,设置了形参,那么在函数调用的时候就需要传入对应的参数,我们把传入的参数叫做实际参数,也叫实参。
案例
function getSum(x, y){
var sum;
sum = x + y;
console.log(sum);
}
var a = 1;
var b = 3;
getSum(a,b);
// x, y 就是形式参数。
// a, b 就是实际参数。
// 相当于 把 a的值赋值给了 x, b的值赋值给了 y, 所以 x = a = 1; y = b = 3; 最后输出结果为4.
函数的返回值
函数的调用结果就是返回值,因此我们可以直接对函数调用结果进行操作。函数通过return返回一个返回值。
返回值语法
function 函数名(形参1, 形参2, 形参3,...) {
//函数体
return 返回值;
}
用变量接收返回值
var 变量名 = 函数名(实参1, 实参2, 实参3,...);
案例
1. //-求一组数中的最大值
function getMax(arr) {
var max = arr[0];
for (var i = 1; i < arr.length; i++) {
if (max < arr[i]) {
max = arr[i];
}
}
return max;
}
2. // - 求阶乘 2! ===> n! ----> 1 * 2 * 3 * 4 *.....*n-1 *n
function getFactorial(n) {
var result = 1;
for (var i = 1; i <= n; i++) {
result *= i;
}
return result;
}
var factorial = getFactorial(5);
console.log(factorial);
3. // - 求1!+2!+3!+....+n!
function getFactorial(n) {
var result = 1;
for (var i = 1; i <= n; i++) {
result *= i;
}
return result;
}
function getSum(n) {
// 求1-n之间每一个数阶层的累加
var sum = 0;
for (var i = 1; i <= n; i++) {
//累加的是每一个数的阶乘
sum += getFactorial(i);
}
return sum;
}
console.log(getSum(5));
返回值详解
- 如果一个函数不需要返回值,可以不写return
- 当函数中不写return的时候,返回的是undefined
- 如果函数使用 return语句,那么跟再return后面的值,就成了函数的返回值
- return 后面可以什么都不跟,如果return后面什么都不跟 会返回undefined
- 函数执行的过程中只要遇到return 后面的代码就不会再执行
- 推荐的做法是要么让函数始终都返回一个值,要么永远都不要返回值。
arguments的使用
所有函数都内置了arguements的对象
arguments对象中存储了传递的所有的实参
arguments是一个伪数组,因此及可以进行遍历
可以获取函数调用时传入的实参
适用于形参个数不确定时使用
案例
function test(a, b, c) {
console.log(arguments);
}
test(5, 6, 8);
// 求任意个数的最大值
function getMax() {
var max = arguments[0];
for (var i = 1; i < arguments.length; i++) {
if (max < arguments[i]) {
max = arguments[i];
}
}
return max;
}
var max = (5, 90, 88, 888, 55555);
console.log(max);
// 求任意个数的和
function getSum() {
var sum = 0;
for (var i = 0; i < arguments.length; i++) {
sum += arguments[i];
}
return sum;
}
var result = getSum(1, 2, 3);
console.log(result);
其他函数
匿名函数
- 没有名字的函数
- 如何使用
- 将匿名函数赋值给一个变量,这样就可以通过变量进行调用
- 匿名函数自调用
// 普通函数的声明
function 函数名() {
//函数体
}
//普通函数调用
函数名()
// 匿名函数的声明
function () {
//函数体
}
// 匿名函数的调用
var 变量名 = function();
//用变量名()进行调用
//自调用函数
(function () {
//函数体
})()
自调用函数
- 当函数书写完成之后立即调用
- 调用完后就被销毁,优化性能
(function 变量名(){
console.log('我是自调用函数');
})()
函数是一种数据类型
函数作为参数时
- 因为函数也是一种类型,可以把函数作为两一个函数的参数,在另一个函数中调用
function test(fn) {
//当我们调用函数却没有给参数时, 形参的值为undefined
console.log(fn);
fn();
}
console.log(test());
function test(fn) {
console.log(fn); // 11
}
function getSum(x, y) {
var sum = x + y;
return sum;
}
test(getSum(5, 6));
函数作为返回值时
- 因为函数是一种类型,所以可以把函数可以作为返回值从函数内部返回。
function test(a) {
var b = 5;
return function() {
console.log(a + b); // 7
}
}
var fn = test(2);
fn();