gpt4 book ai didi

javascript - 在解析时定义封闭函数?

转载 作者:搜寻专家 更新时间:2023-11-01 05:26:00 24 4
gpt4 key购买 nike

通常,我看到函数闭包是由表单实现的

var closedF = (function()
{
return function(){/* return value */}
})();

以便调用 closedF() 返回内部函数的返回值。但是我想使用函数声明(上面是一个函数表达式)创建 closedF 以便在解析时定义它。即

function closedF()
{
return function(){/* return value */}
}

但这不起作用,因为在调用 closedF() 时,它返回内部函数而不是内部函数的返回值。注意:通过上面的声明,我可以使用 closedF()(),但这并不优雅。

这可能吗?

附注通常情况下,我有很多方法可以解决我的特定编程问题,但我实际上希望有人向我展示封闭函数不是 JS 中的“二等公民”函数。

最佳答案

您的问题不一定与函数表达式或函数声明有关。

在你展示的这两种情况下,你都没有得到内部函数的返回值。

可以通过调用内部函数并返回它的值来获取它:

function closedF() {
return (function(){
/* return value */
}()); // <- calling the inner function here
}

缺点是调用外层函数时总是要重新定义内层函数。您可以通过将内部函数缓存为外部函数的属性来防止这种情况发生:

function closedF() {
var func = closedF.__func || (closedF.__func = function(){
/* return value */
});
return func();
}

但是,这可能比帮助更令人困惑。

更简单的方法是立即执行外部函数并将返回的函数分配给一个变量,如@James Long shows in his answer .

更新:

你也可以这样做:

(function() {
window.closedF = function() {

};
}());

虽然都是函数表达式

关于javascript - 在解析时定义封闭函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6629811/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com