函数:就是一个方法或者一个功能体,函数就是把实现某个功能的代码放到一起进行封装,以后想要操作实现这个功能,只需要把函数执行即可=>“封装”:减少页面中重复的冗余代码,提高代码重复使用率(低耦合高内聚)。
洗衣机就是一个函数,生产洗衣机就是封装一个函数(把实现某些功能的代码封装进来),生产的时候不知道用户洗衣服的时候用什么水,什么洗衣粉,洗衣液,柔顺剂,洗什么衣服等,我们需要提供入口(提供的入口在函数中叫做形参,执行的时候放的具体的东西叫做实参),洗完衣服需要能拿出来,洗衣机提供一个出口(在函数中叫做返回值:把函数处理后的结果能够返回给外面用)
- 创建函数
- 形参
- 返回值
- 执行函数
- 实参
- arguments
- 函数底层运行机制
创建函数
//=>ES5 老方式
function [函数名]([形参变量1], ...){
//函数体: 基于JS完成需要实现的功能
}
//执行函数
[函数名]([实参1], ...)
/*
sum:函数名,代表这个函数
sum():让函数执行,代表的是函数执行返回的结果
n/m:是形参,是变量,用来存储函数执行时传递的实参
1/2:是实参,传递给形参变量的值
*/
function sum(n,m){
let result = n+m;
result *=10;
result /= 2;
console.log(result);
}
sum(1,2)
形参的细节
创建函数的时候我们设置了形参变量,但如果执行的时候并没有传递给对应的实参值,那么形参变量默认的值是:undefined
function sum(n,m){
let result = n + m;
result *=10;
result /= 2;
console.log(result);
};
sum();//=>NaN
sum(10);//=>NaN
sum(10,20);//=>150
sum(10,20,30);//=>150
所以会先做一个形参默认处理:如果没有传递形参,给予一个默认值,这样就不会出现NaN了。
function sum(n,m){
if(typeof n === "undefined"){
n = 0;
}
if(typeof m === "undefined"){
m = 0;
};
//
let result = n + m;
result *=10;
result /= 2;
console.log(result);
};
sum();//=>0
sum(10);//=>50
sum(10,20);//=>150
sum(10,20,30);//=>150
函数的中的返回值
函数执行的时候,函数体内部创建的变量,我们是无法获取的或者操作的,如果想要获取内部的信息, 我们需要基于RETURN返回值机制,把信息返回才可以。
RETURN的一定是值,如果没有写return,函数默认返回值是undefined。
函数体中遇到return,后面代码则不在执行。(循环体遇到continue和break也会停止循环)
function sum(n,m){
if( n === undefined|| m === undefined){
return ;//后面代码则不在执行。
}
let result = n + m;
//此处是把result变量存储的值返回给外面
return result; // return 30;
};
let aa = sum(10,20);//此处必有有一个变量接收返回的值,才可以获取到sum函数内部result存储的值。
console.log(aa);//=> Uncaught ReferenceError: result is not defined
匿名函数
匿名函数之函数表达式:把一个匿名函数本身作为值赋值给其他东西,这种函数一般不是手动触发的,而是靠其他程序驱动触发执行(触发某个时间的时候把函数执行)
// document.body.onclick = ;
// setTimeout(function(){},1000);//=> 设置定时器,1000MS后执行匿名函数
// 匿名函数之自执行函数:创建完一个匿名函数,紧接着就把当前函数加小括号执行
(function () {
n = 100
})(100)