【问题标题】:How does returning a function inside a function work在函数内部返回函数如何工作
【发布时间】:2019-02-01 09:37:59
【问题描述】:
我觉得我的例子解释得很好。我不确定在函数内部返回的函数是如何工作的。我觉得解决下面的演示会帮助我理解。任何其他链接或文档也可以很好地阅读。
function LogFunction() {
return function() {
return "just console log this";
};
}
console.log(LogFunction());
// "just console log this" <<< I want this
// "[Function]" <<< I am getting this
【问题讨论】:
标签:
javascript
class
return
【解决方案1】:
您正在返回内部函数的引用,要执行它,您需要再次输入(),以便执行函数引用。
function LogFunction() {
return function() {
return "just console log this";
};
}
console.log(LogFunction()());
//You can also get the function reference in a variable, and execute it:
const innerFunction = LogFunction();
//assigning the returned function reference.
console.log(innerFunction());
//executes the returned reference
【解决方案2】:
在 JavaScript 中,函数被称为“一等函数”,这意味着您可以像(对象/数字)等任何其他类型一样返回/传递函数。你可以找到more about this here。
您可以将其分解为变量以使其更清晰,例如:
function LogFunction() {
return function() {
return "just console log this";
};
}
var a = LogFunction()
console.log( a() );
但是正如其他人正确指出的那样,您可以直接调用它
console.log( LogFunction()() );
在变量示例中,当使用 () 调用 LogFunction() 时,您正在调用该函数,并且此调用的结果被分配给变量 a,因为调用该函数的结果是您的另一个函数需要调用前一个函数的结果才能访问到这个函数的结果a()。
您可以拥有任意多层次的嵌套函数,并且在新的 ES2016 中,您可以利用箭头函数使这段代码更加清晰。
const LogFunction = () => () => "just console log this";
console.log( LogFunction()() );
【解决方案3】:
console.log((LogFunction())());
LogFunction 返回一个函数。所以LogFubction() 是一个函数。你就叫吧
【解决方案4】:
您的函数 LogFunction 返回一个内部函数,您还需要调用该函数才能获得最终结果。
function LogFunction() {
return function() {
return "just console log this";
};
}
console.log(LogFunction()());
你可以使用更少的代码:
function LogFunction() {
return "just console log this";
}
console.log(LogFunction())