从函数返回函数而不调用返回函数

问题描述:

可以这样做吗?从函数返回函数而不调用返回函数

我有以下几点:

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

只是这样做

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

我甚至不知道你的代码实际上在做什么,但我认为你想要的是:

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