前端技能提升(11) 之 什麼是函數柯里化及使用場景 + JS單線程和多線程

導航

在這裏插入圖片描述

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章