JS函数和IIFE

问题描述 投票:0回答:3

当我运行下面的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();

以下输出显示在浏览器的控制台上:

Hello z!

你好x!

你好!

为什么在“ Hello x!之前打印” Hello z!!“ &“ Hello y!”。立即调用函数表达式(IIFE)与'z'变量如何交互?

P.S。 :我是初学者。

javascript iife
3个回答
1
投票

因为这是IIFE:

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'的原因>>


0
投票

类似于上述答案,这就是您的代码的编写方式,调用堆栈首先调用IIFE,然后调用x函数,然后调用y函数。如果要获得良好的视觉效果,请查看Philip Roberts(http://latentflip.com/loupe/)的Loupe。它使您可以编写代码并逐步了解如何调用和执行代码。尝试了解执行顺序对我有很大帮助。


0
投票

[IIFE中的第一个I表示立即。这就是为什么首先执行此功能的原因。

© www.soinside.com 2019 - 2024. All rights reserved.