JS函数基础回顾
目录
- 数学中的函数
- 函数的作用
- 函数的声明方式
- 形参和实参
- 函数的返回值
- 函数式编程
- 编程的基本原则
- 函数参数初始化
- 测试题
数学中的函数:
(1) 存在表达式 y = f(x),其中x是自变量,y是x的函数。
(2) 当x的值确定时,y的值也随之确定。
函数的作用
简单来讲就是将重复的代码抽离成函数,实现代码的复用。其目的是实现高内聚低耦合的编程思想。
函数的声明方式
(1) 函数声明方式。
function test(参数){ //函数语句}。
(2) 函数表达式 / 函数字面量方式。
var test = function test1(){}。
(3) 匿名函数表达式方式。
var test = function(){
//通过函数表达式声明时,如果后面一截没有函数名,是匿名函数
}
(4) 函数表达式 / 字面量函数的特点:
- 因为函数名test1被忽略,只能内部访问,不能外部访问。
- 函数内部可自调用test1。
- 通过test.name可访问到被匿名的test1函数名。
- 过程理解: 把test1函数赋值给了test变量,在赋值的时候,会自动忽略函数名test1,所以外部调用不到。
var test = function test1(){
test1(); //可自调用
}
test1(); //外部调用test1报错,未定义;
test(); //外部通过test变量调用函数;
形参和实参
(1) 形参: 就是变量/占位符, 形式参数; function(a, b){},a,b是形参;
(2) 实参: 就是给变量/占位符赋值, 实际参数。在函数内部可通过arguments实参列表来获取所有的实参。
function test() {
console.info(arguments); //打印的是aa和bb的值
}
test(aa, bb);,// 此处的数值 aa 和 bb是实参。
(3) 形参和实参的特点:
形参和实参的数量可以不等。
(4) 实参列表arguments:
arguments是函数的实参列表,是所有实参的集合,它是一个类数组。
可在函数内部引用和答应它的值。
arguments是 --> 在函数内部打印形参位数: test.length; //是形参的长度位数。
(5) 形参和实参长度的获取:
形参长度的通过函数名.length的方式获取。
function test (a, b, c) {
console.info(test.length); //内部和尾部都可使用
}
console.info(test.length)
test();
实参长度的获取:arguments.length。实参的长度只能在函数内部获取。
function foo () {
console.info(argument.length); //3
}
foo(2018, 2019, 2020);
(6) 实参和形参值的修改:
- 实参和形参是一种映射关系,修改其中一个,另一个的值也发生改变。
- 函数内部可更改实参的值,可修改到arguments[i]。
- 只有已经传值的形参才能修改。如只传入了a,b两个实参,如果修改arguments[2],则修改无效。
如果传实参的时候arguments里没有这个值,在函数里面对形参b赋值,就是对undefined的变量赋值,所以结果还是undefined。因为未被定义。
(7) 形参和实参的区别:
- 一 一对应:如果实参列表中存在形参的参数,二者就会有一个映射的关系,此时函数内对形参赋值,才会改变实参的值。
- 形参存在栈内存中。而实参是数组,存在堆内存中。
函数的返回值
(1) return语句:每个函数最后一条语句都是return。如果没有添加,系统就会默认添加一条return语句,叫隐式添加。
(2) return语句的两个功能: 1、结束函数。 2、返回值。
函数式编程
(1) 将一个固定的功能段或程序段被封装, 实现一个固定的功能。
(2) 封装体需要一个入口和一个出口。 入口就是参数,出口就是返回值。
编程的基本原则:
高内聚,低耦合。
(1) 代码的耦合性:指的是代码中重复的代码过多,导致整个程序过于臃肿且难以维护。
(2) 高内聚的实现思路: 一个功能或模块内部的代码紧密联系度比较强,联系度强就能够让这个模块的独立性强。-- 我们希望一个模块能够独立地完成一个任务,而这个任务完成的好坏,是和高内聚有关系的。
(3) 低耦合的实现思路: 希望把重复的代码给提取出来,组成一个独立的模块功能体,去完成一个独立的功能。
(4) 高内聚低耦合的优点: 让一个模块有强的功能性和高的独立性,从而让模块具有更好的单一责任制的特性。
(5) 代码的解耦合:当程序中的重复代码过多时,就需要解耦合。在js中,解耦合最好的方式是抽离函数,将一些重复的功能代码抽象成函数,实现代码的精简和重复使用。
函数参数初始化
(1) 形参默认值 undefined:
参数的初始默认值是undefined。如果形参和实参中,如果其中一个是undefined,另一个为具体数值,就会取具体数值作为形参的值。
(2) es6给定默认值的写法:
function(a=1, b=2){} //es6给形参赋默认值
测试题:
用ES5实现ES6的参数默认值语法,赋值1和2:
写法1:
var a = arguments[0] || 1; //企业里面一般都这么写。
var b = arguments[1] || 2。
写法2:
var a = typeof(arguments[0]) !== 'undefined' ? arguments[0] : 1。