5

我有个疑问

我的代码:-

function f() { 
    var g = function() 
    { 
    return 1;
    } 
    return g; 
  };

我怎么称呼g?我想一次又一次地返回 1 我想返回 g。

我做了一项研究我找到了解决方案

我们如何称呼 g 是:-

f()();

这是为什么??JavaScript 中有什么f()();。为什么我们不能使用f.g或其他东西来实现这一点。

如何从函数 f 中返回 g ?

请澄清我的疑问?

4

5 回答 5

11

如何从该函数返回 g ?

您从“那个函数”返回g,假设“那个函数”是f. 由于f返回一个函数,因此您可以使用f()(). 这和这个差不多:

var returnedFunction = f();
returnedFunction();

为什么我们不能使用f.g或其他东西来实现这一点?

因为g不是 的属性f。我不完全确定你的目标是什么,但也许你想f成为一个构造函数,并且它的实例有一个方法g

function f() {
    // Constructor function
}
f.prototype.g = function () {
    // Method
};
var myF = new f();
myF.g(); // Now `g` is accessible as a property of the instance

您也可以打算g成为 的静态属性f

function f() {
    // JS has first-class functions so you can set properties on them
}
f.g = function () {
    // Static method of `f`
};
f.g();
于 2013-10-18T07:05:47.683 回答
2

f()正在返回一个函数,第二个()意味着您正在调用该函数。

像这样想

var g = f();
g();

除非你这样做,否则f()()你基本上是内联变量。

如果您想使用它来调用它,则f.g()需要声明f为对象或添加g为属性。

function f() {
  this.g = function() {
    return 1;
  };
}
new f().g();

or

var f = {
  g: function() {
    return 1;
  }
}
f.g();

但我不是你想要完成的 100%。

于 2013-10-18T07:09:17.633 回答
1

因为你return g这是一个函数。这个返回的函数可以再次调用。

Youcall f()它返回一个可以再次调用的函数f()()(第二个括号)。分两部分:

1. var returnValue = f(); // returnValue = function g() { return 1;}
2. returnValue(); // execute function
于 2013-10-18T07:06:28.083 回答
0

f()();大致可以翻译为:

var g=f();//return g
g();//invocation of g
于 2013-10-18T07:07:25.783 回答
0

你可以这样做

 var f = function(){};
 f.prototype={
        g : function() 
     { 
        return 1;
     } 
};

现在您可以将其用作

    var v = new f();
    alert(v.g()); // --> 1
于 2013-10-18T07:13:12.897 回答