函数数据类型的详细解读
函数就是一个方法,可以实现某个功能
把实现某一个功能的代码进行“封装”后期再想实现这个功能,无需重新编写代码,只需要执行函数即可
执行函数=>函数(实参1,实参2,……)
实参(具体的值):就是给函数的行参变量传递的具体值
例sum(17),x=17,y=undefined,创建函数定义了行参,但是执行时候没有传递实参值 ,则默认值是undefined;
例sum(10,20,30),x=10,y=20,
例sum(),x=undefined,y=undefined,
函数的出口:返回值机制
function sum(x=0,y=0){
var total=x+y,
average=total/2;
a=average.toFixed(2);
return"@@";
}
sum : ƒ sum(x,y){} 代表的是函数本身
sum() : 函数执行 代表的是执行后返回的结果(看return)
var resule=sum(10,20)
console.log(resule)
return
不写return或者return后面啥都没有,默认返回值都是undefined
return后面是啥,返回的就是啥
return一定是一个值
函数体中只要遇到return,return下面的代码就不会再执行了!
function sum(x=0,y=0){
var total=x+y,
average=total/2;
a=average.toFixed(2);
return"ABC";
}
var aa=sum();
console.log(aa) //ABC
匿名函数(没有函数名字)
函数表达式:把创建的函数当做值,赋值给变量或者其他内容(把一个函数作为值进行操作的,都叫函数表达式)
自执行函数:创建函数和执行函数一起完成了(创建完函数,立即把函数执行)
第一个小括号中存放的是创建的函数
第二个小括号是把函数执行
例(function(x){
})(100;)
外面用小括号包起来,仅仅是为了让语法支持
除了用小括号把函数包裹起来可以解决语法错误的问题,前面加~±!也都可以让语法正确
function (x){
}(100)
正常创建:声明一个变量叫做fn,只不过存储的值是一个函数
function fn(){}
“函数表达式”创建函数:和上面方式的效果是一样的(在变量提升时,有一些区别)
var fn=function(){
里面这个也相当于函数表达式,创建一个匿名函数,把其作为值返回
return function(){}
}
var f=fn();
document.body.οnclick=function(){}
需求:执行函数的时候传递实参值,但是到底传递多少个实参"不确定",我们想接受函数传递的实参信息
设定形参变量,但是需要知道传递实参的数量和顺序
函数内置实参集合arguments:不论是否传递以及传递多少实参(也不管是否设定形参),集合中包含了所有传递进来的实参信息
不传递就是一个空集合
这个集合是一个"类数组"
ES6中的“…”剩余运算符:函数形参中的剩余运算符,可以获取到除前面设定形参变量接收到的实参信息外,剩下的实参都放到这个集合当中
如果一个形参变量都没有定义,则所有传递实参信息都存到这个集合当中
这个集合是一个“数组”集合
function fn(){
console.log(arguments);
}
fn();
fn(10);
fn(10,20);
fn(10,20,30)
params变量,存储实参集合,数组
function fn(x,…params){
console.log(params,arguments)可以和arguments同时使用
}
fn()
fn(10)
fn(10,20)
fn(10,20,30)
最常见的任意数组求和用的就是arguments的方法