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

Javascript 使用IIFE作为参数的函数表达式?,javascript,iife,hoisting,Javascript,Iife,Hoisting,以下各项按预期工作 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

以下各项按预期工作

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!");
}
如果你把生活调整到

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

My name is Fido!
My name is undefined

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

问题在于,您没有在函数表达式的末尾放分号。您的代码基本上被解释为:

var dogName = function animalName(name) {
  console.log("My name is " + name);
}(function () {
    console.log("My name is Fido!");
})();
据解释器所知,您正在将函数作为第一个参数传递给命名函数表达式,然后尝试将返回值作为函数调用

要解决这个问题,只需在表达式的末尾加一个分号

var dogName=函数animalName(name){
console.log(“我的名字是”+name);

}; // 问题是,您没有在函数表达式的末尾放分号。您的代码基本上被解释为:

var dogName = function animalName(name) {
  console.log("My name is " + name);
}(function () {
    console.log("My name is Fido!");
})();
据解释器所知,您正在将函数作为第一个参数传递给命名函数表达式,然后尝试将返回值作为函数调用

要解决这个问题,只需在表达式的末尾加一个分号

var dogName=函数animalName(name){
console.log(“我的名字是”+name);

}; // 如果注释掉包含清晰分号的中间行,它将成为
函数animalName(name){…}(function…
…一个IIFE。放一个
在定义
animalName
相关:。之后,如果注释掉包含清晰分号的中间行,它将成为
function animalName(name){…}(function…
…一个IIFE。放一个
animalName
后的code>。相关:。