Javascript 在解析时定义封闭函数?

Javascript 在解析时定义封闭函数?,javascript,closures,function-declaration,Javascript,Closures,Function Declaration,通常,我看到函数闭包是通过表单实现的 var closedF = (function() { return function(){/* return value */} })(); 因此,调用closedF()将从内部函数返回返回值。但是我想使用函数声明(上面是函数表达式)创建closedF,以便在解析时定义它。即 function closedF() { return function(){/* return value */} } 但是这不起作用,因为当调用closedF

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

var closedF = (function()
{
    return function(){/* return value */}
})();
因此,调用
closedF()
将从内部函数返回返回值。但是我想使用函数声明(上面是函数表达式)创建
closedF
,以便在解析时定义它。即

function closedF()
{
    return function(){/* return value */}
}
但是这不起作用,因为当调用
closedF()
时,它返回内部函数,而不是内部函数的返回值。注意:在上面的声明中,我可以使用
closedF()()
,但这并不雅观

这可能吗


p、 通常情况下,我有很多方法来解决我的特定编程问题,但实际上我希望有人告诉我封闭函数在JS中不是“二等公民”函数。

你的意思是这样的:

function closedF() {
    return function () {
    }
}
是的,这完全可以接受

编辑:阅读评论,我认为您需要一个自动执行的匿名函数:

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

这将创建一个函数,它可以通过调用<代码>关闭()/<代码>来执行,但我不知道它是否可能作为声明。

< P>您考虑过将函数传递为参数吗?

function closedF(fn){
    return fn;
}
使用它:

var fnParam = function(){...};
...
closedF(fnParam);

这是不可能的。从闭包中获取函数的唯一方法是实际执行包装函数,这当然不能在编译期间发生

您实际要查找的代码是:

var closedF = function(){
    return function(){
       // do stuff
    }
}(); // <-- note the (), which immediately calls the outer function
var closedF=function(){
返回函数(){
//做事
}

}(); // 您的问题不一定与函数表达式和函数声明有关


在您展示的两种情况下,都无法获得内部函数的返回值

只需调用内部函数并返回其值即可获得:

function closedF() {
    return (function(){
        /* return value */
    }()); // <- calling the inner function here
}
然而,这可能会让人困惑,而不是有帮助

更简单的方法是立即执行外部函数,并将返回的函数分配给变量,如下所示

更新:

您也可以这样做:

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

    };
}());

虽然两者都是函数表达式,但我理解中所述的两者之间的区别。您的问题不清楚,请澄清。这是不可能的,甚至没有任何意义。你能把你真正想做的事发出来吗?@cwolves看到问题中的p.s。谢谢。我想他希望立即执行closedF==内部函数(例如,如果你在他的示例末尾添加了
()
)@James Long你是对的,这是我第一个示例的意思(但不是我想要的)。这是一个有趣的话题,但它是如何与这个问题联系在一起的?当我试图理解这个问题时,我认为它可能是这个,但可能不是。我把这个标记为答案,尽管我试图做的似乎是不可能的,因为你的第二个例子是唯一的选择(张贴在这里)杰夫:我想我还没有完全理解你到底想要什么。但是看看我的更新,也许它更接近你想要的。使用函数表达式还是声明都不重要。重要的是您希望并必须在何时执行哪个函数。例如,如果调用外部函数的唯一目的是执行内部函数,那么为什么不直接访问内部函数呢?如果您描述您试图解决的实际问题(如@cwolves所说),我们可能会更好地帮助您。“在您展示的两种情况下,您都没有得到内部函数的返回值。”@Felix Kling为什么不
closedF()
假设第一个示例得到内部函数的返回值?是的,最后一个例子离我想要的更远。我想要在解析时定义的内部函数(“闭合函数”)。这有意义吗?这个问题实际上并不是关于某个特定的问题,只是受到一个问题的启发。@Jeff:“为什么假设第一个示例中的closedF()没有得到内部函数的返回值?”因为您没有调用内部函数。如果调用
closedF()
,将调用外部函数,该函数只返回内部函数。(b) 好的,我想我明白了。那么不,没有办法(这有意义吗?)。内部函数确实存在,并且在调用外部函数之前无法存在。可能您希望加入讨论(如果发生):