JS进阶(1)

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(当前数组元素,当前元素索引号){
    //函数体
    //没有返回对象
})

注意:

  1. forEach 主要是遍历数组
  2. 参数当前数组元素是必须要写的, 索引号可选择

3. Array

数组常见实例方法-核心方法:

array

作用:reduce 返回函数累计处理的结果,经常用于求和
基本语法:

//数组reduce方法
arr.reduce(function (){},起始值)
arr.reduce(function (上一次值, 当前值){}, 初始值)

累计值参数:

  1. 如果有起始值,则以起始值为准开始累计, 累计值 = 起始值
  2. 如果没有起始值, 则累计值以数组的第一个数组元素作为起始值开始累计
  3. 后面每次遍历就会用后面的数组元素 累计到 累计值 里面 (类似求和里面的 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 函数,用于取消尚未执行的定时器。达到防抖效果。
抖动:当你停止的时候触发,节流:一个时间段触发一次

来自上海
博客文章均为Ferryman.原创,转载请注明文章地址及作者
如有需要,可通过RSS订阅文章
有任何问题,可以在评论区留言哦~
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇