for循环
1.for循环语法
-
也是重复执行代码
-
好处:把声明起始值、循环条件、变化值写到一起,让人一目了然
for(声明记录循环次数的变量;循环条件;变化值){循环体
}
for和while的异同
一:共同点
- 都是循环
- 都有三要素
二:区别
-
for循环
- 当如果明确了循环的次数的时候推荐使用for循环
- 当不明确循环的次数的时候推荐使用while循环
退出循环
- continue:结束本次循环,继续下次循环
- break:跳出所在的循环 //可以退出当前循环
嵌套循环
for(外部声明记录循环次数的变量;循环条件;变化值;){
for(内部声明记录循环次数的变量;循环条件;变化值;)
}
数组
数组(Array)是一种可以按顺序保存数据的数据类型、
可以一次性存储多个数据
数组的基本使用
1.声明语法
let 数组名 = [数据1,数据2,数据3.]
1.如果是名词,请在后面加s \ es
2.其他常见名称有: arr list items
studentList postList
3.数据是按顺序保存的
例如:let 数组名 = ['小明','小刚','小红']
特性:
- 数组的元素{值}的存储是有顺序的,索引顺序从0开始
- 数组是按顺序保存,所以每个数据都有自己的编号
- 计算机中的编号从0开始,所以小明的编号为0,小刚的编号为1,以此类推
- 在数组中,数据的编号也叫索引或下标
- 数据可以存储任意类型的数据
- 后期操作数据靠索引下标来操作
操作:操作是指 增加 删除 修改 查询(获取)
2.取值语法
数据名[下标]
例let names = ['小明','小刚','小红']
names[0] 小明
补充:names[100] 如果没有这个索引 则会返回undefined -- 索引越界 不会报错
3.一些术语
- 元素: 数组中保存的每个数据都叫数组元素
- 下标:数组中数据的编号
- 长度:数据中数据的个数,通过数组的length属性获取
4.遍历数组:
用循环把数组中每个元素都访问到,一般会用到for循环遍历
语法:
for(let i = 0; i< 数组名.length;i++){
数组名[i]
}数组操作
操作数组 增 删 改 查
1.数组增加新的数据push(你想追加的元素)
数组.push() 方法将一个或多个元素追加
特点:
- 它是将元素添加到数组的最后
- 返回新增元素之后数组的长度
2.数组插入新的数据unshift(你想插入的元素)
- 它是将元素添加到数组的开头
- 返回新增元素之后数组的长度
2.数组删除元素
- 数组.pop() 方法从数组中删除最后一个元素,并放回该元素的值
语法:数组名.pop()
可以删除数组的最后一个元素,并且返回当前被删除的元素
- 数组.shift() 方法可以删除数组的第一个元素
语法:数组名.shift()
重点:* *使用splice()**删除 (后续最经常使用)
语法:数组() 方法 删除指定元素
数组名.splice(起始索引,删除数量)
起始索引:从0开始
删除的数量:可以指定数量,如果没有指定,则删除从索引位置开始一直到最后的所有元素()
数组的修改
数组[下标] = 新值
例如:
let arr = [1,2,34,5,6]
arr[10] = 100
console.log(arr) //此时数组的长度会变成10 并且在10索引的位置添加10这个元素
注意:如果索引不存在 就是添加:就是在当前索引位置添加一个元素,同时这个操作会改变当前数组的长度
函数
function是被设置为执行特定任务的代码块
说明:函数可以把具有相同或相似逻辑的代码包裹起来,通过函数调用执行这些被包裹的代码逻辑,这么做有利于精简代码结构方便复用
函数的使用
-
函数声明语法
- function 函数名(){ 函数体 } -
函数的命名规范
- 和变量命名基本一致
- 尽量小驼峰命名法
- 前缀应该为动词
- 命名建议:常用动词约定
| 动词 | 含义 |
|---|---|
| can | 判断是否可执行某个动作 |
| has | 判断是否含义某个值 |
| is | 判断是否为某个值 |
| get | 获取某个值 |
| set | 设置某个值 |
| load | 加载某些数据 |
- 函数的调用
函数名()
有参数的函数声明和调用
- 声明语法
function 函数名(参数列表){
函数体
}
-
参数列表
- 传入数据列表
- 声明这个函数需要传入几个数据
- 多个数据要用逗号隔开
-
例:
- 单个参数
function getSquare(num1){
document.write(num1 * num1)
}
- 多个参数
function getSum(num1,num2){
document.write(num1 + num2)
}
多参数设置
形参:
-
在定义方法时声明的参数,在方法的()中声明的
-
形参,说明需要一个值
-
特点
- 调用前,他是一个参数的占位,说明调用方法需要传递值过来
- 调用时,形参是 方法的局部变量,只有在方法中可以使用,在方法外不能使用
-
实参
- 实参是指实际参数,也就是实际存在的值,它是一个真正的值
- 实际是调用者来准备的
结论: 调用方法传递参数 就是实参为形参赋值的表现
let sum = 0
function getSum(start,end) {
// start,end 就是形参,形参可以理解为这个函数内声明的变量
for(let i = start;i<=end;i++){
sum += i
}
console.log(sum);
}
getSum(1,10)
//1,10就是实参,实参可以理解为是给这个变量赋值
注意:如果没有传递参数,那么形参默认就是undefined,相当于定义了一个变量但是却没有赋值
函数的返回值
函数功能的单一性,函数只做业务处理,并不会对结果进行处理
它会将结果返回,让调用者进行处理
语法:
return 值
return关键字可以实现函数的值的返回
说明:
- 不是每个函数都会有返回值
函数返回值的细节
- 如果函数内部没有写return来返回值,也会默认返回undefined
- 默认情况下,函数只能返回一个值(变量) 如果想直接返回多个值,一般可以用一个结构(对象)进行包装
- 如果直接返回多个值 ,最终也会返回最后一个值
- return会立即结束当前函数 并且后面的代码不会再被执行
- 函数可以没有return 这种情况函数默认返回值为undefined
- return只能写在函数中
- 一个函数中可以写多个return,但是只会运行其中一个,函数执行的时候运行到return后面的代码不再执行
- 不同业务处理需要时候,可能会出现多个return,其中,中止函数运行的return一般写在一个条件判断以内
函数作用域
变量作用域特殊情况:
-
如果函数内部或者块级作用域内部,变量没有声明,直接赋值,也当全局变量看,但是强烈不推荐
-
函数内部的形参可以看做是局部变量,所以形参相当于函数内部定义的局部变量,只有在函数内部可以使用。
-
全局作用域,函数外部或者整个script有效
-
局部作用域,也成函数作用域,函数内部有效
-
块级作用域 {}有效
匿名函数
具名函数:在声明函数的时候为函数命名
匿名函数:在声明函数的时候没有名称
使用匿名函数可以很好的解决function函数的全局污染问题
语法:
let fn = function(){
//函数体
}
调用:
fn() //函数名()
自调用函数
语法:
//第一个()优先级() 第二个()是函数调用的()
;(function(){
})()
//特点 我们不能人为调用
//以后的使用:
//避免全局污染 初始化