在js中,函数就是一个方法(一个功能体),基于函数一般都是为了实现某个功能
函数诞生的目的就是为了实现封装,把实现一个功能的代码封装到一个函数中,后期想要实现相同功能,只要执行这个函数即可,不必再次重复编写代码,起到了 “高耦合,低内聚”的作用
高耦合,低内聚:减少冗余代码,提高代码的重复使用率
//语法 function 函数名称( 参数 ){ 函数体:实现功能的js代码 } 函数名() ;//执行函数 //ES6 箭头函数 let 函数名( 变量名 )=( 参数 )=>{ 函数体 }
function fn(){ var num=10; .... } let fn=()=>{ let num=10; } fn();
函数作为引用数据类型中的一种,它也是按照引用地址来操作的,接下来学习一下函数的运行机制:
创建函数:
1、首先会开辟一个新的堆内存,把函数体的代码当做字符串存储到内存中
2、把开辟堆内存的地址赋值给函数名(变量名)
执行函数:
把之前储存到堆内存的代码字符串变为真正的代码执行,实现应有的功能
1、函数执行,首先会形成一个私有作用域(栈内存,代码执行的环境)
2、把之前储存在堆内存的代码字符串复制一份过来,变成真正js代码,在新开辟的作用域中 自上而下执行
函数的形参和实参
参数是函数的入库:当我们在函数中封装一个功能,发现原材料不确定,需要执行函数的时候传递进来,此时就基于参数的机制,提供出入口即可
例如:求任意两个数的和,参数是任意不知道的两个数
function sum(n,m){//形参变量 入口 n和m代表要求和的两个数字 return n+m; } sum(10,30);//实参 具体的数据值 n是10,m是30
sum(50);//n是50,m是 undefined
sum();//n,m 都是 undefined
sum(1,2,3);//n 是1,m是2,3没有接收的形参变量
形参:函数创建时的入口,是函数的私有变量,只能在当前私有作用域起作用,可有多个
实参:函数执行的时候传递的具体的数据值
arguments形参集合