我有疑问
我的代码: -
function f() {
var g = function()
{
return 1;
}
return g;
};
我怎样才能打电话给g?我想一次又一次地返回1我想要返回g。
我做了一项研究我发现了一个解决方案
我们如何调用g是: -
f()();
为什么会这样? JavaScript中的f()();
是什么。为什么我们不能使用f.g
或其他东西来实现这一点。
如何从函数f ??
返回g请澄清我的怀疑?
答案 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