函数
函数是一种结构,使用function关键字声明
函数不会自动运行
函数定义后,需要主动调用才会触发
语法:
//1.声明函数:将代码存入结构中
function 函数名(){
函数体:一段代码
}
//2.调用函数:执行函数体代码
函数名();
语法误区:函数语法就两个(声明与调用)
1.声明函数: function 函数名(){ 函数体代码 }
2.调用函数: 函数名()
3.变量取值: 函数名 (不会执行函数体代码,只是以字符串形式将变量中存储的东西打印出来而已)
<script>
需求 : 一段代码 需要在多个地方执行
复制粘贴弊端 : (1)代码冗余 (2)不便于维护
1.函数作用 : 实现某个功能代码的重复利用
//(1)声明函数:打印99乘法表
function getChengFa() {
//定义一个变量,保存即将产生的字符串(实用,后面return讲)
let chengfaStr = '';
//外层循环:控制层数
for (let i = 1; i <= 9; i++) {
//内存循环:控制列数
for (let j = 1; j <= i; j++) {
//拼接内容
chengfaStr += `${j} * ${i} = ${j * i}  `;
}
//换行
chengfaStr += '<br>';
}
//返回结果
document.write(chengfaStr);
}
//(2)调用函数 : 执行函数体代码
getChengFa();
console.log('99乘法表,我的最爱');
3.函数注意点
a.以后什么样的代码你会放入函数中?
(1)多个地方执行
(2)独立的小功能
b.函数与循环 有着本质的区别
(1)本质区别
函数 :是一种数据类型,存储代码
循环 :是一种语法,重复执行代码
(2)作用不同
函数 : 一段代码在多个地方执行一次
循环 : 一段代码在一个地方执行多次
</script>
函数参数
- 函数参数分为两种:
- 形参:定义函数时的参数,属于
占座位
- 实参:调用函数时的参数,属于
实际数据
- 形参:定义函数时的参数,属于
- 函数不会自动运行:所以先
占位
;调用时就是要实际运行,所以给数据
<script>
1.函数作用 : 实现某个功能代码的重复利用
2.参数
2.1 参数作用 : 调用者 传递数据 给函数
2.2 语法
传 : 调用者
函数名(实参:实际参数)
收 : 函数
function 函数名(形参:形式参数){ 函数体代码 }
2.3 函数传参的本质 : 实参给形参赋值
* 实参和形参数量可以不一致,但是按照顺序赋值
// 2.利用函数实现指定层数的乘法表
/**
* @description: 得到指定层数的乘法表
* @param {number} level:层数
* @return: 产生的字符串
*/
function getChengFa(level) { // level = 9
//定义一个变量,保存即将产生的字符串
let chengfaStr = '';
//外层循环:控制层数
for (let i = 1; i <= level; i++) {
//内存循环:控制列数
for (let j = 1; j <= i; j++) {
//拼接内容
chengfaStr += `${j} * ${i} = ${j * i}  `;
}
//换行
chengfaStr += '<br>';
}
//返回结果
document.write(chengfaStr);
}
//用户输入层数
let level = +prompt('请输入一个要打印的乘法表的层数:');
// 调用函数
getChengFa(level);
</script>
函数返回值
- 返回值是函数运行后的结果处理方式
- 实际开发过程中,
不会在函数内部进行输出
,都是把结果返回给调用者- 函数不对结果负责:函数只负责做,至于做出来是否合适不管
- return关键字
- JS函数可以没有返回值
- 可以使用return返回任意类型数据
- return会终止函数的继续执行(结束函数运行)
<script>
1.函数作用 : 将代码存入变量中,可以实现代码的复用
2.返回值
2.1 返回值 : 函数 传递数据 给调用者
2.2 语法
传 : 函数
function 函数名(形参){ return 值; }
收 : 调用者
let 变量名 = 函数名()
//求任意两个数字的和
function getSum(a,b){
let sum = a+b;
console.log(sum);
return sum;
console.log('1111');//不会执行
};
//将函数调用结果显示到页面
// 函数外部 无法直接 获取函数内部的变量
//console.log(sum);
/*函数调用工作流程 : 固定三个步骤
1. 传参
2. 执行函数体代码
3. 返回值
*/
let res = getSum(100,50);
console.log(res);
</script>
函数总结
1.函数几种形态
无参无返回 : 使用较少
无参有返回 : 使用不多
有参无返回 : 使用不多
有参有返回 : 使用最多
2.函数完整的工作流程(原理)
a. 传参 : 调用者传递数据给函数
b. 执行函数体代码
c. 返回值 : 函数将结果返回给调用者
3.函数返回值语法注意点
a. 如果函数没有写return,默认返回值是undefined
b. 如果函数有写return,但是后面没有接值。返回值是undeifined
c. 如果函数有写return,并且return后面有值。返回值就是return后面的值
d. return关键字作用 : 结束函数体代码。 return后面代码不执行
函数另一种声明方式
1.函数声明:function 函数名() {};
2.函数表达式:let 函数名 = 匿名函数
- 匿名函数:函数的字面量又称为匿名函数,顾名思义就是没有变量名的函数
- let 函数名 = function(){};
3.两者唯一区别:函数声明可以在任何地方调用,而函数表达式方式调用必须在声明后面
<script>
fn1();
//1.函数声明 : function 函数名(){ 函数体代码 }
function fn1(){
console.log('11111');
};
fn1();
//2.表达式声明 : let 函数名 = 匿名函数
//具名函数 : 有名字的函数 匿名函数 = 没名字的函数
// fn2();//报错
let fn2 = function(){
console.log('2222');
};
fn2();
//3.唯一区别 : 函数声明可以在任何地方调用,表达式声明只能在声明后调用
</script>
arguments关键字
1.arguments关键字:获取函数的所有实参
2.为什么要有arguemnts关键字
- js是一门弱语言:声明函数的时候假如只有一个形参,实际上在调用的时候无论我们传入多少实参程序都不会报错
- 为了防止这种情况:函数有一个arguments关键字来获取所有的实参
3.arguments特点
- 1.只能在函数体中使用,在函数外使用会报错
- 2.是一个特殊的数组(伪数组)
- 有数组的三要素,但是没有数组其他的方法
- 3.arguemngs数组中的元素与形参一一对应
4.arguements好处:可以让函数变得更加灵活
- 可以让函数根据实参的不同而实现不同的功能
<script>
arguments关键字作用:获取函数的所有实参
本质:当前函数的内置对象,每一个函数都有一个arguments对象,作用是存储调用者传递过来的所有实参
特点:1.只能在函数体中使用,函数外部使用会报错
2.是一个特殊的数组(伪数组)
3.arguments伪数组的元素与形参一一对应
说明:1.可以用函数变得更加灵活
2.arguments是一个伪数组
伪数组:只有数组的下标、元素、长度,没有数组其他方法
/**一:argument用法演示*/
//1.这行代码会报错,因为函数外部无法使用arguments
// console.log ( arguments );
//2.定义一个无参的函数,作用是打印该函数的所有参数
function fn ( num1 ) {
//(1)arguemnt保存的是所有的实参的值
// console.log ( num1 );
// console.log ( arguments );//arguments只能在函数内部使用
//(2)arguemnt与形参是一一对应的
//修改了形参,arguemnt也会修改
num1 = 100;
console.log ( arguments );//修改了形参,arguments也会修改
//反之,修改了argeumnts,形参也会变化
}
fn(10,20);//实参与形参一一对应
/** 二:arguments实际用途展示:求不确定数量的参数的和 */
function add() {
//定义变量保留数据
let sum = 0;
console.log(arguments);
//有参数:遍历数组统计结果
for (let i = 0; i < arguments.length; i++) {
// 防止字符串和其他类型乱入,需要做安全判定
let value = arguments[i];
if (isNaN(value)) {
return false;
}
//说明value肯定是数值了,但是还要保证不是字符串(影响+号运算)
sum += Number(value);
}
return sum;
}
console.log(add());
console.log(add(100));
console.log(add(10,20));
</script>