javascript函数in in function in variable

时间:2013-10-18 07:03:29

标签: javascript

我有疑问

我的代码: -

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

我怎样才能打电话给g?我想一次又一次地返回1我想要返回g。

我做了一项研究我发现了一个解决方案

我们如何调用g是: -

f()();

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

如何从函数f ??

返回g

请澄清我的怀疑?

5 个答案:

答案 0 :(得分: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();

答案 1 :(得分: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%你想要完成的事情。

答案 2 :(得分:1)

因为你return g是一个功能。返回此函数可以再次调用。

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

1. var returnValue = f(); // returnValue = function g() { return 1;}
2. returnValue(); // execute function

答案 3 :(得分:0)

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

var g=f();//return g
g();//invocation of g

答案 4 :(得分:0)

你可以这样做

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

现在您可以将其用作

    var v = new f();
    alert(v.g()); // --> 1