函数
为什么需要函数?
作用:是简化代码,方便复用,封装程序功能
掌握函数的基本使用,让代码具备复用能力 理解封装的意义,能够具备封装函数的能力
function. 是被设计为执行特点任务的代码块
function 函数名(){
函数体
}
function sayHi(){
document.write(`h1`);
}
函数使用
- 函数名命名规范
- 和变量命名基本一致尽量小驼峰式命名法
- 前缀应该为动词
- 命名建议;常用动词约定 can has is get set load
函数的调用语法
//函数调用,这些函数体内的代码会被执行
函数名()
- 注意:声明(定义)的函数必须调用才会真正被执行,使用()调用函数
- 函数是用funcion关键字声明
- 函数不调用自己不执行
- 调用方式:函数名()
函数的复用代码和循环重复代码有什么不同?
- 循环代码写完即执行,不能很方便控制执行位置
- 随时调用,随时执行,可重复调用
函数传参
函数的声明和调用
声明语法
参数列表
-
传入数据列表
-
声明这个函数需要传入几个数据
-
多个数据用逗号隔开
-
调用带参数的函数,需要传递参数,参数是一一对应的第一个参数值 传递给函数的第一个参数。
方法声明的时候,设置的参数叫 形参
形参就是一个形式参数,说明这里需要一个值
- 不要使用let定义
- 形参相当方法的局部变量,只有在这方法中使用。
- 方法的形参在没有设置方法之前只是一个形式占位,在调用的时候,需要接收用户传递的数据,它才是真正的变量
- 实参:实际参数,真正存在的值,实参是调用者提供的
- 调用方法的过程就是实参为形参赋值的过程。数量保持一致
- 开发实际尽量保持形参和实参个数一致,数量对应,类型对应。
函数传递参数的好处?
可以极大的提高了函数的灵活性
函数参数可以分为那两类?怎么判断他们是那种参数?
函数可以分为形参和实参
函数声明时,小括号里面的是形参,形式的参数
函数调用时,小括号里面的是实参,实际的参数
参数中间用什么符号隔开?
逗号
函数案例学生总分
function getSum(arr){
//初始值为 let sum = arr[0];
let sum=arr[0];
//遍历学生数组
for(let i=0;i<arr.length;i++){
//学生分数相加
sum+=arr[i];
}
//输出学生总分
console.log(sum);
document.write(sum);
// return arr;
}
let arr1=[1,23,454,68];
let arr2=[31,2334,4354,6438];
getSum(arr1);
getSum(arr2);
函数返回值
函数是被设计为执行特定任务的代码块
任意函数都有返回值,如果没有手动return 那么函数默认会返回undefined
缺点:把计算后的结果方式写死了,内部处理了
解决:把处理结果返回给调用者
有返回值函数的概念: 当调用某个函数,这个函数会返回一个结果出来 这就是有返回值的函数
let result=propmt(`请输入你的年龄?`);
let result2 = parseInt('123');
使用场景是 return 返回值,打印输出。
用return返回数据
-
不能同时执行多个return 第一个return生效
-
.函数内部 如果写了return 那么它下面的代码就不会执行
-
.如果一个函数 没有写return 相当于写了return undefined
作用域
常来说,一段程序代码中所用到的名字并不总是有效和可用的,而限定这个名字的可用性的代码范围就是这个名字的作用域。作用域的使用提高了程序逻辑的局部性,增强了程序的可靠性,减少了名字冲突。
每一个变量 都是有作用域的要求,否则就会报错。
全局作用域
作用于所有代码执行的环境(整个 script 标签内部)或者一个独立的 js 文件
局部作用域
作用于函数内的代码环境,就是局部作用域。 因为跟函数有关系,所以也称为函数作用域。
块级作用域
在 for if while大括号里面使用。
变量的作用域
如果函数内部或者块级作用域内部,变量没有声明,直接赋值,也当全局变量看,但是强烈不推荐
- 函数内部的形参可以看做是局部变量,所以形参相当于函数内部定义的局部变量,只有在函数内部可以使用。
作用域链
只是代码寻找变量的一种机制 ,规定 就近原则。
是判断要根据 函数的定义来判断 而不是函数的调用。
函数的定义来寻找最近的变量
1.先找自己的作用域
2.往外部(父级)的作用域来找
3.继续往外部(父级)来找
4.直到找全局作用域。
如果前面没有使用let 关键字 ,是全局变量。
let userName ='af';
都建议定义变量 的时候 都要记得使用let关键字。
求函数数组的最大值
<script>
function getMax(arr){
let max =arr[0];
for(let i=0;i<arr.length;i++){
if(max<arr[i]){
max=arr[i];
}
}
console.log(max);
}
let arr=[1,232,456,89,435];
getMax(arr);
</script>
函数数组最小值
<script>
function getMin(arr){
let min=arr[0];
for(let i=0;i<arr.length;i++){
if(min>arr[i]){
min=arr[i];
}
}
console.log(min);
}
getMin([123,12321,321343,54,54,354,5]);
</script>
函数数组奇数之和
<script>
function getSum(arr){
let sum=arr[0];
for(let i=0;i<arr.length;i++){
if(arr[i]%2 !== 0){
sum+=arr[i];
}
}
console.log(sum);
}
getSum([25,9,743,32,21]);
</script>
求两个变量里面中最大值
<script>
function getMax(num1,num2) {
let sum=0;
if(num1>num2){
sum=num1;
console.log(`最大值是;${sum}`);
}else{
sum=num2;
console.log(`最大值是;${sum}`);
}
}
getMax(23,4);
</script>
补充知识
匿名函数顾名思义指的是没有名字的函数,在实际开发中使用的频率非常高!也是学好JS的重点。
匿名函数:没有实际名字的函数。
首先我们声明一个普通函数:
//声明一个普通函数,函数的名字
function fn(){
console.log("HTML");
}
JS 中作用域分为哪三种? 全局作用域。函数外部或者整个script 有效 局部作用域。也称为函数作用域,函数内部有效 块级作用域。 { } 内有效
根据作用域不同,变量分为哪三种? 全局变量 局部变量 块级变量 有一种特殊情况是全局变量是那种?我们提倡吗? 局部变量或者块级变量 没有let 声明直接赋值的当全局变量看,我们强烈不提倡 还有一种特殊情况,函数内部的形参可以当做局部变量看