es6

作者: 马甲要掉了 | 来源:发表于2020-05-25 21:23 被阅读0次

let const var

函数提升优先于变量提升,函数提升会把整个函数挪到作用域顶部,变量提升只会把声明挪到作用域顶部
var 存在提升,我们能在声明之前使用。let、const 因为暂时性死区的原因,不能在声明前使用
var 在全局作用域下声明变量会导致变量挂载在 window 上,其他两者不会
let 和 const 作用基本一致,但是后者声明的变量不能再次赋值


暂时性死区

class

其实在 JS 中并不存在类,class 只是语法糖,本质还是函数。

class Person {}
Person instanceof Function // true
var a = 1
function a() {}
console.log(a) //1

并发 并行

并发是宏观概念,我分别有任务 A 和任务 B,在一段时间内通过任务间的切换完成了这两个任务,这种情况就可以称之为并发。
并行是微观概念,假设 CPU 中存在两个核心,那么我就可以同时完成任务 A、B。同时完成多个任务的情况就可以称之为并行

Genarator

Generator 最大的特点就是可以控制函数的执行。

function *foo(x) {
  let y = 2 * (yield (x + 1))
  let z = yield (y / 3)
  return (x + y + z)
}
let it = foo(5)
console.log(it.next())   // => {value: 6, done: false}
console.log(it.next(12)) // => {value: 8, done: false}
console.log(it.next(13)) // => {value: 42, done: true
解析

aysnc await

一个函数如果加上 async ,那么该函数就会返回一个 Promise

async function test() {
  return "1"
}
console.log(test()) // -> Promise {<resolved>: "1"}

async 就是将函数返回值使用 Promise.resolve() 包裹了下,和 then 中处理返回值一样,并且 await 只能配套 async 使用

let a = 0
let b = async () => {
  a = a + await 10
  console.log('2', a) // -> '2' 10
}
b()
a++
console.log('1', a) // -> '1' 1
解析

setTimeout setInterval requestAnimationFrame

由于JS 是单线程执行的,如果前面的代码影响了性能,就会导致 setTimeout、setInterval 不会按期执行.
requestAnimationFrame 自带函数节流功能,基本可以保证在 16.6 毫秒内只执行一次(不掉帧的情况下),并且该函数的延时效果是精确的,没有其他定时器时间不准的问题

requestAnimationFrame实现setInterval

function setInterval(callback, interval) {
  let timer
  
  let startTime =Date.now()
  console.log('lala')
  const loop = () => {
    timer = window.requestAnimationFrame(loop)
    endTime = Date.now()
    if (endTime - startTime >= interval) {
      startTime = Date.now()
      callback(timer)
    }
  }
  timer = window.requestAnimationFrame(loop)
  return timer
}

let a = 0
setInterval(timer => {
  console.log(1)
  a++
  if (a === 3) cancelAnimationFrame(timer)
}, 1000)

map filter reduce

map filter 都接受三个参数(值,索引,数组)

[1, 2, 3].map(v => v + 1) // -> [2, 3, 4]
let array = [1, 2, 4, 6]
let newArray = array.filter(item => item !== 6)
console.log(newArray) // [1, 2, 4]

reduce接受((累计值,值,索引,数组)=>{},初始值)

const arr = [1, 2, 3]
const sum = arr.reduce((acc, current) => acc + current, 0)
console.log(sum)

相关文章

网友评论

      本文标题:es6

      本文链接:https://www.haomeiwen.com/subject/kpvuahtx.html