Javascript JS函数与IIFE

Javascript JS函数与IIFE,javascript,iife,Javascript,Iife,当我运行以下JS代码时: var x = (function () { console.log('Hello x!'); }); var y = function () { console.log('Hello y!'); }; var z = (function () { console.log('Hello z!') return 2; })(); x(); y(); 浏览器控制台上会打印以下输出: 你好,z 你好,x 哈罗,y 嗨,z!在Hello

当我运行以下JS代码时:

var x = (function () {
    console.log('Hello x!');
});

var y = function () {
    console.log('Hello y!');
};

var z = (function () {
    console.log('Hello z!')
    return 2;
})();

x();

y();
浏览器控制台上会打印以下输出:

你好,z

你好,x

哈罗,y

嗨,z!在Hello x!&你好,y!。立即调用的函数表达式IIFE如何与“z”变量交互

附言:我是个初学者。

因为这就是生活:

var z = (function () {
    console.log('Hello z!')
    return 2;
})();
如果没有IIFE,上述代码可以重写为:

var x = (function () {
    console.log('Hello x!');
});

var y = function () {
    console.log('Hello y!');
};

var z = function () {
    console.log('Hello z!')
    return 2;
};
z();

x();

y();

这就是为什么“Hello z”首先被打印出来的原因,就像上面的答案一样,这是代码的编写方式,调用堆栈首先调用IIFE,然后是x函数,然后是y函数。如果你想要一个好的视觉表现,可以看看Philip Roberts的Loupe。它允许您编写代码并逐步了解如何调用和执行代码。在试图理解执行顺序时帮了我很多

生命中的第一个I意味着立即。 这就是为什么先执行这个函数

此外,IIFE不能与“z”变量交互。 但您可以像这样向它传递参数:

var hi = 'Hello z!';

var z = (function (txt) {
    console.log(txt)
})(hi);

希望这会有所帮助。

立即这个词的意思是现在或马上。通过在函数表达式的末尾添加,函数立即被调用,返回值是z的值。在X和Y之前,IIFE立即被调用为/run/etc。OP的可能副本知道这是一个IIFE,并且立即调用的函数表达式IIFE如何与“z”变量交互?可以重写为是和否。在本例中,z是一个变量作用在原始的z是2.var z=函数{return 2;}与var z=函数{…}不同;z@evolutionxbox@Andreas重写上面的代码会更幸运,所以它保持不变!来说明为什么`为什么你好z!是先打印出来的。你是说哪个答案?在我的屏幕上,你的答案在顶部。对不起,我应该引用这个答案。来自@bapafes482的答案。