【问题标题】:Returning a function from a function without calling the returned function从函数返回一个函数而不调用返回的函数
【发布时间】:2012-08-07 05:59:57
【问题描述】:

可以吗?

我有以下几点:

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

但是,无论我使用常规调用约定还是 call 方法,调用 populate.func 都会同时调用被调用函数和返回函数。我希望能够调用 populate.func 并将函数作为一个值返回以供使用,而无需实际运行它......

【问题讨论】:

  • 为什么是new?没有它它应该可以工作。我的意思是,说infunc = function(data){ /* stuff*/ }; 你这样做:return infunc;
  • 你想把函数作为字符串返回吗?
  • 新,因为我读到这是一个技巧,通过引用传递函数,并以当你将函数作为参数传递时的状态传递变量,而不是在它被调用时传递变量。我认为它这样做是因为只要维护指向子函数的指针,父函数也不能被垃圾收集,也不能被它的调用堆栈。什么的。
  • @RobF 你被严重误导了,去阅读更多关于javascript的内容......

标签: javascript function


【解决方案1】:

就这样做

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

您的代码正在使用您的函数作为构造函数来实例化一个新对象,但您想返回对您的函数的引用,所以只需删除 new 关键字。

【讨论】:

  • 这似乎奏效了。在留下反馈之前将等待并进行一些实验。为什么 new 运算符会导致它同时调用这两个函数?
  • 因为您执行了该函数以从中实例化一个对象,使用该函数作为构造函数。
  • 这不能回答问题。
  • @RobF 确实如此,这正是它调用该函数的原因。您应该阅读 new 在 JS 中的作用。
  • @RobF 你觉得你明白我想说什么还是不清楚?
【解决方案2】:

我什至不确定您的代码实际上在做什么,但我认为您想要的是:

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

【讨论】:

  • @RobF 在 new 中添加并没有任何区别,您通过引用返回一个对象,由您的构造函数实例化,而不是它自身的函数。
  • return function... 将返回对函数的引用而不执行它。
猜你喜欢
  • 1970-01-01
  • 2010-09-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-17
  • 1970-01-01
  • 1970-01-01
  • 2021-12-18
相关资源
最近更新 更多