导航
1、什么是函数柯里化及使用场景
函数柯里化就是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数而且返回结果的新函数的技术。
太权威了。
来一个简单的demo
// 普通的add函数
function add(x, y) {
return x + y
}
// Currying后
function curryingAdd(x) {
return function (y) {
return x + y
}
}
add(1, 2) // 3
curryingAdd(1)(2) // 3
懂了吧。
懂了的话你跟我讲讲,我不会。
2、JS单线程和多线程
单线程在程序执行时,所走的程序路径按照连续顺序排下来,前面的必须处理好,后面的才会执行。
单线程就是进程只有一个线程。
多线程就是进程有多个线程。
其实这里Javascript的单线程运行机制和上面单线程定义是一个执行流程,它只有一个主线任务,且只能按照主线上的代码一步一步执行。
那么问题来了,它既然是单线程,为什么还能执行一些异步操作呢?难道js是个双标狗?
因为JS运行在浏览器中,是单线程的,每个window一个JS线程,既然是单线程的,在某个特定的时刻只有特定的代码能够被执行,并阻塞其它的代码。而浏览器是事件驱动的(Event driven),浏览器中很多行为是异步(Asynchronized)的,会创建事件并放入执行队列中。javascript引擎是单线程处理它的任务队列,你可以理解成就是普通函数和回调函数构成的队列。当异步事件发生时,如mouse click, a timer firing, or an XMLHttpRequest completing(鼠标点击事件发生、定时器触发事件发生、XMLHttpRequest完成回调触发等),将他们放入执行队列,等待当前代码执行完成。
又是一场串子看不懂的,大概就是js是单线程的,但是浏览器是可以进行多线程的,js触发事件,事件就会被放入执行队列中,然后单线程读取队列执行事件。