前言:初识JS,适当回顾,有助于理解。
求数组中的最大值
如何求一个数组中的最大值? 首先,定义一个数组。
let arr = [1,2,3,5,56,4,8,9,48,9,1,4]
求最大值:
- 获取数组的每一个值:----遍历:
for - 找两个值进行比较,找到更大的值:比较----
if
tips ~
- 关于数组的命名-语义化:可以是
arr相关、带s的单词(复数):items/names本身是复数:children list
let max = arr[0]
let min = arr[0]
- 循环遍历数组:
for while do...while - 三要素:变量初始值、条件、变量的变化
- 就算没有在这个位置写三要素,也要写;
for(1-变量初始值;2-条件-5;4-变量的变化-7){
3-循环体-6
}
for (let i = 0; i < arr.length; i++) {
// 满足条件,说明默认max还不是最大值,它就需要被替换
if (nums[i] > max) {
max = arr[i];
}
if (nums[i] < min) {
min = arr[i];
}
}
console.log(max, min);
函数的基本定义
- 调用函数: 函数名称():只要函数名称后面带有()就是在调用函数
- 调用一个函数,会执行函数体内的“所有”代码
函数名称:动词
function 函数名称(){函数体}
没有传递实参,形参默认是undefined
function getMax(arr){
if(typeof arr !='object'){
return
}
for(let i = 0;i<arr.length;i++){
if(arr[i]>max){
max = arr[i]
}
if(arr[i]<min){
min = arr[i]
}
}
}
关于return的细节
- return会终止当前函数的执行,意味着return后面的代码不在执行了
- 默认也会返回undefined,如果一个函数没有返回值,那么久默认返回
undefined - 函数并不能决定操作结果如何处理,函数应该将处理结果返回给调用者
- return:可以用于函数中,返回相应的数据
- 且!!!return只能用于函数中
如何返回多个值?
- 如果直接以逗号分隔返回多个值,最终只能返回最后那一个值
return只能返回一个变量- 所以,现阶段我们可以定义一个数组,存储你想返回的数据,最终将数组返回
例如
return[max,min]
方法的形参
- 形参:形式参数:就是一个数据的占位:告诉你这里需要一个值“如果用户不传递相应的会有可能得到错误的结果”
- 在定义方法的时候()里面声明的变量就是形参
- 如下代码:
num1、num2就是形参,说明用户调用getSum方法需要传递两个变量 - 形参可以定义任意个
function getSum(num1, num2) {
console.log(num1, num2);
let sum = num1 + num2;
console.log(sum);
}
- 如果没有传递参数,形参默认是undefined
- 调用方法传递的具体的数据,就是实参
- 实参就是实际存在的值,这个值我们要先定义好
- 参数传递:顺序对应:第一个实参给第一个形参 (类型对应、数量对应)
- 调用方法的过程就是,实参为形参,赋值的过程
- 形参相当于方法的局部变量,只有在方法体({})内可以使用
function getSum(num1, num2) {
let sum = num1 + num2;
console.log(sum);
}
// num1 is not defined
// console.log(num1, num2)
getSum(100, 200);
短路运算的运用
- 通过短路运算为参数设置默认值
- 如果没有传递参数,参数默认值为undefined
||
- 逻辑运算符(做判断条件使用,写在判断位置 例如if(这里)):口诀,一真则真,全假才假
- 短路运算(做赋值使用,写在=号右边),第一个为真就第一个值,否则第二个值
&&
-
逻辑运算符使用,做条件判断:一假则假,全真才真
-
短路运算(做赋值使用,写在=号右边),第一个为真还要继续判断第二个值 ...
-
在js 转换bool值为false的有:
0 ‘’ “” null undefineda = a || 0也可以写作
if(!a){a=0}
b=b ||0
+两边有一边是字符串,那么+就是字符串拼接符- 如果两边都不是字符串,
+就是运算符,系统会将两边的变量转换为数值 - undefined转换为数值,是
NaN:NaN不能和任何数据进行运算(NaN)和比较(false)
短路运算的案例
||短路运算
let res = 10 > 20 || 100////true
&&短路运算
let res = 10 < 20 && 100////false
函数的作用域:
- 在函数里面定义的变量,默认在函数外面不能使用 function test(){ //真正的全局变量,挂载到window(会产生全局污染,增加电脑的负载,少量没有关系) }
块级作用域
-
块级作用域:块是指一个{}
-
意思是指在{}中声明的变量,在{}外面不能使用
-
let会产生块作用域
-
作用域:定义的变量所在的{}结构
-
有效作用域:能够真正使用这个变量的区域:从定义这个变量开始在他所在的结构{}结束
-
let变量记住!!!!
先声明!!!再赋值!!!再使用!!!
作用域链
- 如果函数内部定义了变量,那么优先使用函数自己的。
- 先找自身函数的变量,如果没有,则找外层(上一级)作用域,以此类推。
- 但是函数外部不能使用函数内部的成员
匿名函数
具名函数,如下代码,函数的名称就是test
function test(){}
函数名称()》》 test()
匿名函数不能单独存在,它只有三个使用方式 1.作为一个变量的值 ,值的类型是一个函数,函数表达式
// let age = 20
// let fn = function() {
// console.log(123)
// }
// fn(
2.作为一个自调用函数==立即执行的函数
;(function(){console.log(123)})()
3.将匿名函数做为函数的参数--回调函数
let btn = document.querySelectorI('button') // 获取元素
为btn这个元素添加一个事件监听器,添加一个单击事件的监听,当用户真的单击这个按钮的时候,调用你所传入的处理函数
btn.addEventListener('click', function() {})
案例分享
需求-用户输入一个秒数,将秒数传递给一个函数,函数返回时分秒,我们接收返回值,在控制台打印输出正确的格式 1.接收用户输入 2.定义一个函数,有一个参数代表 秒 3.进行转换,获取 时 分 秒 4.返回多个值 5.调用函数,接收返回值,对返回值进行自定义处理
let num = +prompt('请输入一个秒数')
let arr = exchange(num)
document.write(
`${num}秒所对应的时间是:${arr[0]}时${arr[1]}分${arr[2]}秒`
)
function exchange(miao) {
// 1.获取时
let hour = parseInt(miao / 3600)
// 2.获取分
let minute = parseInt((miao % 3600) / 60)
// 3.获取秒
let second = miao % 60
// 返回多个值,现在可以包装这数组
return [hour, minute, second]
}
今日回顾到此~------------与君共勉--------------