Функциональное выражение с использованием IIFE в качестве параметра?
Ниже работает как задумано
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 выполняется первым перед функциональным выражением в последнем примере?
1 ответ
Решение
Проблема в том, что вы не ставите точку с запятой в конце выражения своей функции. Ваш код по существу интерпретируется как это:
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);
}; // <--
(function () {
console.log("My name is Fido!");
})();