使用 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!");
})();
以下按预期工作
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!");
})();