当我运行下面的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。 :我是初学者。
因为这是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'的原因>>
类似于上述答案,这就是您的代码的编写方式,调用堆栈首先调用IIFE,然后调用x函数,然后调用y函数。如果要获得良好的视觉效果,请查看Philip Roberts(http://latentflip.com/loupe/)的Loupe。它使您可以编写代码并逐步了解如何调用和执行代码。尝试了解执行顺序对我有很大帮助。
[IIFE中的第一个I表示立即。这就是为什么首先执行此功能的原因。