函数:
函数不是数据结构,是可以实现一定功能即把可以实现一定功能的代码,封装成一个函数。
声明函数的方式:
1.字面量函数声明
书写格式:关键字 标识符(函数名)小括号 {函数体}
function f70 () {代码块}
function serach() {
let i = 1;
let j = 2;
console.log(`您的余额为1000`);
let num1 = i + j;
let num2 = i - j;}
调用函数:执行函数体,声明了函数但是没有进行调用,那么函数体不执行
函数名 小括号
serach();
1.
构造函数声明
书写格式;关键字标识符(函数名) 赋值符号 new {函数体}
let f70 = new Function () {代码块}
let f71 = new Function(
) //该方法可先声明后使用
f71();
console.log(122);
let f71 = new Function(
"console.log(123)"
);
f71();
3.匿名函数表达式创建
// 匿名函数表达式的创建方式
let f70 = function f71() { //此处的F71没有任何作用
console.log("2545454545");
}
f70();
console.log(f70.name);
函数三要素:
1.
函数名 声明函数后要调用才执行函数体
2.
返回值 (函数100%有返回值)如果有return 就返回return后面的值,没有就是undefined 。return自带功能终止当前函数
3.
参数
1.形参(形式参数) 在函数声明的时候就是形参
2.实参(实际参数) 在函数调用的时候就是实参
函数名.arguments
arguments是函数的属性,返回所有的实参内容
可以类似数组的使用方式进行值的获取
console.log(f72.arguments);//输出所有实参内容
console.log(f72.arguments[f72.arguments.length-1]);//输出实参下标
console.log(f72.arguments.length); //输出实参的个数 怎么证明是什么类型,看他有没有该种结构的方法
console.log(f72.length);//4 输出形参的个数
在调用函数时,位置取决于实参
形参的个数比实参多,多的形参数为undefined
实参的个数比实参多,多的实参数不会使用
不定参数
1,接受多余的参数(以数组的形式)
f75(1, 2, 3, 4, 5, 6);
function f75(a, b, …c) { //不知道要传多少值,把多余的给c, 必须写在形参的最后一位 否则报错
console.log(a, b, c);
console.log(f75.length); //2 不计算不定参数与赋予了默认值的
}
函数名.length 返回函数的形参个数
注:
不计算“不定参数” 即 …形参
只计算默认值之前的形参个数
function f76(a = 2, b, c) {
console.log(a, b, c);
console.log(f76.length);//0
}
f76(1, 2, 3, 4, 5, 6);
函数变形的书写方式:
箭头函数: 函数体在3行以内,筛选与排序
1.省略function关键字
2.如果只有一个形参,可以省略小括号
3.如果函数体只有一条语句,可以省略大括号
4.如果函数体只有一条语句,并且需要返回这条语句的结果 则可以省略return关键字
5.不可以使用arguments
6.不会吧自己的this绑定到函数上
7.不可以用作构造函数
let f88 = (a) => console.log(a);
f88(500);
let f89 = b => console.log(1);
f89();
let f77 = a => a + 1;
let f78 = f77(59);
console.log(f78);
let f84 = (a, b, c, d) => {
let f85 = a + b;
return f85;
}
console.log(f84(1, 2)); //3
回调函数:
当一个函数b,提供给函数a当参数时,则b就是回调函数。
function a(temp) {
console.log("f70");
temp();
}
function b() {
console.log("f71");
}
a(b)
立即执行函数:
创建即调用,调用即销毁
适用场景:关于一次性变量(时间)
(function () {
console.log(f72);
})();