2013-07-28 28 views
2

這段代碼來自AngularJS源代碼,它有很多這種'函數返回函數'樣式代碼。爲什麼在Javascript中使用這種語法(從函數返回函數)

function locationGetterSetter(property, preprocess) { 
    return function(value) { 
    if (isUndefined(value)) 
     return this[property]; 

    this[property] = preprocess(value); 
    this.$$compose(); 

    return this; 
    }; 
} 

,這是否有過只是有額外的參數,如這樣的「常規」的功能是什麼advatanges -

function locationGetterSetter(property, preprocess, value) { 
    if (isUndefined(value)) 
    return this[property]; 

    this[property] = preprocess(value); 
    this.$$compose(); 

    return this; 
} 
+7

它基本上是咖喱。 –

+0

柯里化帶來的好處是什麼? – csss

+3

您不必每次都傳遞不變的參數。 –

回答

2

在這種情況下,它似乎是已用於生成二傳手的功能/ getter函數的值。

沒有看到更多的上下文到這裏被使用的地方,人們只能猜測它爲什麼這樣做。然而,從它的外觀來看,我可以想象它正在被用來更容易地生成具有某些行爲的動態對象(例如,通過某些驗證獲取/設置值)。

與您的替代方案相比,它可能不會像那樣考慮返回的功能使用關鍵字this。很可能它被分配到一個對象中,因此this將引用該對象。

正如註釋中指出的那樣,它基本上是currying,但也可能用於生成函數的數據不能在後期使用生成的函數作爲參數傳遞,因爲角度會做一些編譯/鏈接數據綁定,其中信息可能僅在編譯/鏈接階段可用。

通過關閉兩個參數還可能有一些非常非常非常小的性能優勢。