.一个标准的函数声明,由关键字 function 、函数名、形式参数和函数体组成
.使用关键字 function 配合函数名声明,也叫命名函数
.有名字的函数又叫具名函数
.可以放在任何地方 - 预处理 - 提升
function 函数名 (形参列表) { //函数逻辑实现 return 返回值; }
.能体现函数功能的语义化标识符
.通常使用动词+名词形式
.函数复用时的定制/个性化特点;通过不同的参数实现类似的业务;此时的参数是形式参数 - 形参[占位符]
.个数:根据函数功能,可以使用参数也可以不使用参数;也可以使用任意多的参数:以逗号,分隔
.使用:函数逻辑实现过程中,通常直接使用形参,也可以使用 arguments 数组接受不定个数的形参,见后续内容
.传值:所有参数传递的都是值,不可能通过引用传递参数;有不少开发人员在这一点上可能会感到困惑,因为访问变量有按值和按引用两种方式,而参数只能按值传递;可以指定参数默认值
.函数功能的具体实现
.通常需要借助局部变量完成
.建议使用 let 声明变量,将其作用域限制在当前函数快内
.使用 var 声明的变量也是局部变量,只能在函数内部访问它
.可以在不同的函数中使用名称相同的局部变量
.局部变量比同名全局变量的优先级高,所以局部变量会隐藏同名的全局变量
.函数运行完毕,局部变量会被删除
.函数的执行结果
.可以有返回值;也可以没有返回值
.没有显示的指定返回值,函数的返回都是 undefined
.可以使用 return 退出函数或返回结果
.位于 return 语句之后的任何代码不会执行
.如果没有返回值,也可以省略 return:所有逻辑执行完毕后,自动退出函数
.逻辑处理过程中,可以随时使用 return退出函数,如数组遍历中,已经拿到了需要的数据,不需要继续执行后面的代码
.推荐:让函数始终都返回一个值,便于调试
function dis() { console.log('hi'); } console.log(dis());//undefined
function dis(age = 18) { return age }
function dis(num1, num2) { return num1 + num2;//有返回值 } console.log(dis(1, 2));//3
const sum = function (形参列表) { //函数逻辑实现 return 返回值; };
function cb(fn, para) { return fn(para); } function add(num) { return num + 10; } let res = cb(add, 10); console.log(res);
function sum(num0, num1) { return num0 + num1; }
function sum() { let res = 0; for (let i = 0; i < arguments.length; i++) { res += arguments[i]; } return res; } sum(1, 2); sum(1, 2, 3);
function fn(a, b) { console.log(fn.length);//2 - 形参个数为2 console.log(arguments.length)//4 - 实际传入4个参数 } fn(1, 2, 3, 4)