導航
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觸發事件,事件就會被放入執行隊列中,然後單線程讀取隊列執行事件。