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>。相关:。