js反柯里化

2021-07-13 17:25:11 字數 1278 閱讀 7610

反柯里化主要是借用別人的函式,比如類陣列沒有push函式,但是可以借用push函式,.push()呼叫的時候,push裡面的this值是,但是arguments.push()是不行的,因為arguments沒有這個方法,那怎麼辦呢,反柯里化就是要修改裡面的this值,所謂的this泛化,讓this程式設計其他物件,從而達到借用的目的。以下是三個反科里化函式

文章內容借鑑於稍微做了些修改而已。

function uncurring()

function uncurring()

var push=aarray.prototype.push.uncurring();

var a={}

push(a,1,2,3)//object

這時候a成為了push函式裡的this值。

下面具體講一下這三個函式的工作原理,其實都是一樣的。反柯里化應用中,有幾個知識點事比較重要的,

1.首先是call函式的大致實現原理,當我們執行x.call(obj,1,2,3)的時候,到底是做了什麼?call的源**大概是這樣的:

function call()

}所以最後會在obj上增加一系列的屬性。反柯里化後返回的函式,執行該函式時,第乙個引數就是最後執行的那個借用函式裡使用的this值。

文章裡還提到了一下這個應用,就是對call進行反柯里化。下面來解析一下**。

var call = function.prototype.call.uncurrying();

/*返回的是function()*/

function $(id)

var demo = call($, document, 'demo');

其實執行的就是this(document,"demo")//this是call函式,並且這個call函式裡的this是$,

其實執行的就是$("demo")//$函式裡面的this是document,

其實執行的就是document.getelementbyid("demo")

*/console.log(demo);

文章還提到的乙個是對uncurring函式就行uncurring化。

var uncurrying = function.prototype.uncurrying.uncurrying();

返回的是function(),所以這時候就退化到了前面例子的情況。

*/var sq = map([1, 2, 3],

function(n) );

console.log(sq); // [1,4,9]

function uncurring() }

柯里化與反柯里化

柯里化,可以理解為提前接收部分引數,延遲執行,不立即輸出結果,而是返回乙個接受剩餘引數的函式。因為這樣的特性,也被稱為部分計算函式。柯里化,是乙個逐步接收引數的過程。在接下來的剖析中,你會深刻體會到這一點。反柯里化,是乙個泛型化的過程。它使得被反柯里化的函式,可以接收更多引數。目的是建立乙個更普適性...

柯里化與反柯里化

柯里化,可以理解為提前接收部分引數,延遲執行,不立即輸出結果,而是返回乙個接受剩餘引數的函式。因為這樣的特性,也被稱為部分計算函式。柯里化,是乙個逐步接收引數的過程。在接下來的剖析中,你會深刻體會到這一點。反柯里化,是乙個泛型化的過程。它使得被反柯里化的函式,可以接收更多引數。目的是建立乙個更普適性...

Scala柯里化和反柯里化

名詞解釋 在電腦科學中,柯里化 currying 是把接受多個引數的函式變換成接受乙個單一引數 最初函式的第乙個引數 的函式,並且返回接受餘下的引數且返回結果的新函式的技術。柯里化舉例說明 def curry1 a,b,c a a,f a,b c b c b b f a,b 這個函式的結果是乙個高階...