1.异步编程:js的代码为单线程,从先往后同步执行。在其中会产生一些异步操作,如setTimeOut、dom事件绑定,这些会放入异步队列,等待同步代码执行完毕后再来执行。
eventloop是js的事件循环机制,先执行整体同步代码,然后将异步代码放入消息队列排队,等待同步代码执行完毕,然后一次执行消息队列的任务。
整体代码可看做宏任务,和一些异步任务如setTimeOut、setInterval也是宏任务,宏任务的执行顺序是一个宏任务执行完成后,检查当前宏任务产生的微任务先执行,然后再执行下一个宏任务。
微任务:由宏任务执行途中产生,会放入消息队列中。如:promise.then(),mutationObserver,process.nextTick
一、
let promise = new Promise((resolve, reject) => {
resolve('成功:')
// reject('失败')
})
promise.then(value => {
let a = 'hello'
return value + a
}).then(value => {
let b = ' lagou'
return value + b
}).then(value => {
let c = ' i love u'
console.log(value + c)
})
二、练习一
const fp = require('lodash/fp')
let isLastInstock = fp.flowRight(fp.prop('in_stock'), fp.last)
console.log(isLastInstock(cars))
练习二、
const fp = require('lodash/fp')
let isFirstName = fp.flowRight(fp.prop('name'), fp.first)
console.log(isFirstName(cars))
练习三、
let getaverageCars = fp.flowRight(_average, fp.map((car) => car.dollar_value))
console.log(getaverageCars(cars))
练习四、
let sanitizeNames = fp.flowRight(_underscore, fp.join(' '), fp.map(fp.toLower), fp.split(' '))
console.log(sanitizeNames(['Hello World']))
二、练习一
const fp = require('lodash/fp')
const { Container, Maybe } = require('./support.js')
// 使用异步编程函数来使函子里面的值改变
let maybe = Maybe.of([5, 6, 1])
let ex1 = (x) => {
x = fp.map(value => {
return fp.add(value, 1)
}, x)
return x
}
console.log(maybe.map(x => ex1(x)))
练习二、
const fp = require('lodash/fp')
const { Container, Maybe } = require('./support.js')
let xs = Container.of(['do', 'ray', 'me', 'fa', 'so', 'la', 'ti', 'do'])
let ex2 = (x) => {
return fp.first(x)
}
console.log(xs.map(x => ex2(x)))
练习三、
const fp = require('lodash/fp')
const { Container, Maybe } = require('./support.js')
// 练习三,使用safeProp和fp.first找到user的name首字母
// curry柯里化函数:若参数不满足,可返回函数接收剩余参数
let safeProp = fp.curry(function (x, o) {
return Maybe.of(o[x])
})
let user = {id: 2, name: 'Albert'}
let ex3 = (x) => {
return fp.first(x)
}
console.log(safeProp('name', user).map(x => ex3(x)))
练习四、
const { Container, Maybe } = require('./support.js')
// 练习四:使用Maybe重写ex4函数
// let ex4 = function (n) {
// if (n) {
// return parseInt(n)
// }
// }
let ex4 = Maybe.of('1')
console.log(ex4.map(x => {return parseInt(x)}))
手写promise