对这个javascript闭包模式感到困惑吗

对这个javascript闭包模式感到困惑吗,javascript,closures,Javascript,Closures,我对这种行为感到困惑:内部函数会立即被调用,而且没有问题。但为什么我必须有一个任务?为什么我不能匿名写 当然,你可以匿名写: h = function(){ x = function(){ alert("try"); }(); x; }; 事实上,您的示例不起作用,因为您忘记在最后一行调用它: (function(){ (function(){ alert("try"); })(); }) (); 我添加了一个var,并

我对这种行为感到困惑:内部函数会立即被调用,而且没有问题。但为什么我必须有一个任务?为什么我不能匿名写

当然,你可以匿名写:

h = function(){
    x = function(){
        alert("try");
    }();
    x;
};
事实上,您的示例不起作用,因为您忘记在最后一行调用它:

(function(){
    (function(){
        alert("try");
    })();
}) ();

我添加了一个var,并将内部执行向下移动了一行

} ();
然后你可以调用h

h = function(){
    var x = function(){
        alert("try");
    };
    x();
};
或者您可以直接使用

h();
或者,您可以使用

h = function(){
    var x = function(){
        alert("try");
    };
    x();
}();

希望这有帮助

最后一行是为了调试目的,我发现变量未定义。为什么我必须给变量分配一个立即执行的函数?如果我没有,我有一个语法错误,但是变量仍然没有定义。你在这里到底想做什么?没什么,我只是在读“javascript-好的部分”,我正在做一些测试。但是为什么要两个否决票呢?一言不发?这太愚蠢了。谢谢你,Naeramath7,我省略了调用行,在onload上我有h();但你的例子非常详尽,谢谢。我对示例中需要的x变量感到惊讶,但它仍然没有定义。。
h = function(){
    var x = function(){
        alert("try");
    };
    return {
        x:x
    };
};

h().x();