1. 箭头函数(重要)
基本语法
使用场景:箭头函数更适用于那些本来需要匿名函数的地方
语法1:基本写法
//1. 普通函数
const fn = function () {
console.log(123)
}
fn()
// 2. 箭头函数
const fn = () => {
console.log(123)
}
fn()
语法2:只有一个参数可以省略小括号
//1. 普通函数
const fn = (x) => {
console.log(x)
}
fn(1)
// 2. 箭头函数
const fn = x => {
console.log(x)
}
fn(1)
语法3:如果函数体只有一行代码,可以写到一行上,并且无需写 return 直接返回值
//1. 普通函数
const fn = function(x, y){
return x + y
}
console.log(fn(1, 2))//3
//2. 箭头函数
const fn = (x, y) => x + y
console.log(fn(1, 2))//3
语法4:加括号的函数体返回对象字面量表达式
//箭头函数可以直接返回一个对象。属性名:属性值
const fn = (uname) => ({ name: uname })
console.log(fn('刘德华'))
箭头函数参数
箭头函数里面有arguments动态参数吗?可以使用什么参数?
- 没有arguments动态参数
- 可以使用剩余参数 ..args
箭头函数this
箭头函数里面有this吗?
- 箭头函数不会创建自己的this,它只会从自己的作用域链的上一层沿用this
2. 遍历数组 forEach 方法(重要)
forEach 就是遍历 加强版的for循环 适合于遍历数组对象
语法;
被遍历的数组.forEach(function(当前数组元素,当前元素索引号){
//函数体
//没有返回对象
})
注意:
- forEach 主要是遍历数组
- 参数当前数组元素是必须要写的, 索引号可选择
3. Array
数组常见实例方法-核心方法:
作用:reduce 返回函数累计处理的结果,经常用于求和等
基本语法:
//数组reduce方法
arr.reduce(function (){},起始值)
arr.reduce(function (上一次值, 当前值){}, 初始值)
累计值参数:
- 如果有起始值,则以起始值为准开始累计, 累计值 = 起始值
- 如果没有起始值, 则累计值以数组的第一个数组元素作为起始值开始累计
- 后面每次遍历就会用后面的数组元素 累计到 累计值 里面 (类似求和里面的 sum )
//1. 没有初始值
const total = arr.reduce(function (prev, current){
return prev + current
})
console.log(total)
//2. 有初始值
const total = arr.reduce(function (prev, current){
return prev + current
}, 10)
console.log(total)
//3. 箭头函数的写法
const total = arr.reduce((prev, current) => prev + current, 10)
console.log(total)
4. Promise
表示(管理)一个异步操作最终状态和结果值的对象
使用步骤:
// 1. 创建Promise对象
const p = new Promise((resolve, reject) => {
})
// 2. 执行异步任务-并传递结果
// 成功调用:resolve(值) 触发 then() 执行
// 失败调用:reject(值) 触发 catch() 执行
// 3. 接收结果
p.then(result => {
// 成功
}).catch(error => {
// 失败
})
5. 同步代码和异步代码
- 什么是同步代码?逐行执行,原地等待结果后,才继续向下执行
- 什么是异步代码?调用后耗时,不阻塞代码执行,将来完成后触发回调函数
- JS 中有哪些异步代码?
setTimeout / setInterval
事件
AJAX - 异步代码如何接收结果?依靠回调函数来接收
6 async函数和await
- async和await关键字让我们可以用一种更简洁的方式写出基于Promise的异步行为,而无需刻意地链式调用promise。
- 在 async 函数内,使用 await 关键字取代 then 函数,等待获取 Promise 对象成功状态的结果值
- 使用步骤:
// 1. 定义async修饰函数 async function getData() { // 2. await等待Promise对象成功的结果 const pObj = await axios({url: 'http://hmajax.itheima.net/api/province'}) const pname = pObj.data.list[0] const cObj = await axios({url: 'http://hmajax.itheima.net/api/city', params: { pname }}) const cname = cObj.data.list[0] const aObj = await axios({url: 'http://hmajax.itheima.net/api/area', params: { pname, cname }}) const areaName = aObj.data.list[0] document.querySelector('.province').innerHTML = pname document.querySelector('.city').innerHTML = cname document.querySelector('.area').innerHTML = areaName }
7. async函数和await_捕获错误
- 使用:try…catch语句标记要尝试的语句块,并指定一个出现异常时抛出的响应
-
语法:
try { //要执行的代码 } catch (error) { //error接收的是,错误信息 //try里的代码,如果有错误,直接进入这里执行 }
async function getData() { // 1. try包裹可能产生错误的代码 try { const pObj = await axios({ url: 'http://hmajax.itheima.net/api/province' }) const pname = pObj.data.list[0] const cObj = await axios({ url: 'http://hmajax.itheima.net/api/city', params: { pname } }) const cname = cObj.data.list[0] const aObj = await axios({ url: 'http://hmajax.itheima.net/api/area', params: { pname, cname } }) const areaName = aObj.data.list[0] document.querySelector('.province').innerHTML = pname document.querySelector('.city').innerHTML = cname document.querySelector('.area').innerHTML = areaName } catch (error) { // 2. 接着调用catch块,接收错误信息 // 如果try里某行代码报错后,try中剩余的代码不会执行了 console.dir(error) } }
8. 总结
async await就是同步处理,用async标记当前函数,函数中使用awiat就会让这句代码同步处理。必须执行完毕,才继续执行后面的。
防抖(Debounce)是一种常用的优化技术,用于限制连续触发的事件处理函数的执行频率
(打王者回城过程就是防抖,打断需要重新回)
setTimeout 返回一个非负整数,这个标识符可以传递给 clearTimeout 函数,用于取消尚未执行的定时器。达到防抖效果。
抖动:当你停止的时候触发,节流:一个时间段触发一次
来自上海