使用 IIFE 作为参数的函数表达式?

Functional expression using IIFE as a param?

以下按预期工作

var dogName = function animalName(name) {
  console.log("My name is " + name);
}

dogName('Scruffy');

(function () {
    console.log("My name is Fido!");
})();

如果注释掉dogName('Scruffy');它输出这个

My name is function () {
  console.log("My name is Fido!");
}

如果将 IIFE 调整为

(function () {
  console.log("My name is Fido!");
}()); // ()) instead of )()

输出

My name is Fido!
My name is undefined

为什么函数表达式使用 IIFE 作为它的名称变量,为什么在最后一个例子中 IIFE 在函数表达式之前先执行?

问题是您没有在函数表达式的末尾放置 semi-colon。您的代码基本上被解释为:

var dogName = function animalName(name) {
  console.log("My name is " + name);
}(function () {
    console.log("My name is Fido!");
})();

就解释器而言,您正在将函数作为第一个参数传递给命名函数表达式,然后尝试将 return 值作为函数调用。

要解决此问题,只需在表达式末尾放置一个分号即可。

var dogName = function animalName(name) {
  console.log("My name is " + name);
}; // <--

(function () {
    console.log("My name is Fido!");
})();