2012-08-07 279 views
0

可以這樣做嗎?從函數返回函數而不調用返回函數

我有以下幾點:

populate.func = function(node, state) { 
    return (new function(data) { /* stuff*/ }); 
} 

但是,調用populate.func不約而同地呼籲這兩個所謂的功能和返回功能,不管我用正則調用約定或調用方法。我想能夠調用populate.func並只是返回函數作爲值使用,而不實際運行它...

+0

爲什麼'新'?它應該沒有它。 我的意思是,說'infunc =函數(數據){/ *東西* /};'你這樣做: '返回infunc;' – Prasanth 2012-08-07 06:03:12

+0

你想返回函數作爲一個字符串? – 2012-08-07 06:03:15

+0

新的,因爲我讀到這是一個技巧,通過引用傳遞一個函數,並在它作爲參數傳遞函數時,而不是當它被調用時傳遞變量。我認爲它是這樣做的,因爲只要一個指針保持在子函數中,父代也不能被垃圾收集,也不能被它的調用堆棧收集。或者其他的東西。 – 2012-08-07 06:09:03

回答

1

只是這樣做

populate.func = function(node, state) { 
    return (function(data) { /* stuff*/ }); 
} 

您的代碼實例化使用函數作爲構造函數創建一個新的對象,但你想回到你的函數的引用來代替,所以只需刪除新的關鍵字。

+0

這似乎工作。在留下反饋意見之前,稍等一下並試驗一下。爲什麼新的操作符會導致它調用這兩個函數? – 2012-08-07 06:12:11

+0

因爲你執行了函數來實例化一個對象,使用該函數作爲構造函數。 – 2012-08-07 06:13:37

+0

這並不回答這個問題。 – 2012-08-07 06:19:35

0

我甚至不知道你的代碼實際上在做什麼,但我認爲你想要的是:

populate.func = function(node, state) { 
    return function(data) { /* stuff*/ }; 
} 
+0

@RobF添加新的沒有做任何差異,你通過引用返回一個對象,由您的構造函數實例化,但不是功能它自己。 – 2012-08-07 06:08:59

+0

'return function ...'將返回一個函數的引用,而不執行它。 – Vatev 2012-08-07 06:11:19