立即调用的函数表达式运行最后定义的函数.为什么?

Immediately invoked function expressions runs the last defined function. Why?

本文关键字:函数 定义 为什么 最后 表达式 调用 运行      更新时间:2023-09-26

在使用立即调用的函数表达式时,我遇到了一些意想不到的奇怪行为。下面的代码在末尾有IIFE时运行函数hello。为什么会发生这种情况?

var hello = function () {
    console.log("hello");
}
(function () {
})();

运行这个,它不会

var hello = function () {
    console.log("hello");
};
(function () {
})();

这是因为JavaScript解释器将其理解为连续代码,除非您将;标记为语句的末尾。

您的代码

var hello = function () {
    console.log("hello");
}
(function () {
})();

实际上变成这样的

var hello = function () {
               console.log("hello");
            }(function(){})();

解释器以function () {}为参数立即运行hello函数,并为下一个()抛出错误。