внутри IIFE, так как новая переменная будет в глобальном namespce

я есть функция IIFE в файле с именем test.js, т.е.

(function mainIIFE() {
    "use strict";
    var print_name = function(first, last) {
        console.log(first + " " + last);
    };
}());

Как бы я назвал print_name в HTML-файл. У меня в голове есть

  <head>
    <script type="text/javascript" src="test.js"></script>
  </head>

а также

<script>
    new print_name("Bob", "Downs");
</script>

позже в моем HTML-файле.

Но когда я пытаюсь запустить, он не распознает функцию print_name.

 Pointy16 дек. 2017 г., 00:22
Идея вызова IIFE изначально бессмысленна.
 CBroe16 дек. 2017 г., 00:33
Возможно, вы захотите взглянуть на шаблон выявления модуля вместо этого.
 George Jempty16 дек. 2017 г., 00:33
Зачем вообще нужен IIFE? Я думаю, что вы слишком усложняете вещи
 IMTheNachoMan16 дек. 2017 г., 00:25
IIFE означает выражение с немедленным вызовом функции, так как именно вы ожидаете его вызова? Похоже, вы хотите, чтобы IFEE создал функцию, доступную в глобальной области видимости, чтобы вы могли запускать / вызывать ее. Это правильно?
 Pointy16 дек. 2017 г., 00:23
Тем не менее, если вы изменитеvar print_name = ... вwindow.print_name = ... он должен работать. Но не называйте этоnew потому что это тоже не имеет смысла.

Ответы на вопрос(2)

Поскольку вы заявляетеprint_name с участиемvar, его область действия является локальной для IIFE, поэтому вы не можете вызвать ее снаружи. Вам необходимо назначитьwindow.print_name сделать его глобальным.

(function mainIIFE() {
    "use strict";
    window.print_name = function(first, last) {
        console.log(first + " " + last);
    };
}());

Также не понятно, почему вы используетеnew вызвать функцию, так как она не заполняет объект.

это то же самое, что назначить егоwindow.print_name внутри IIFE, так как новая переменная будет в глобальном namespce

var print_name = (function mainIIFE() {
    "use strict";
    var print_name = function(first, last) {
        console.log(first + " " + last);
    };
    return print_name;
}());

print_name('Foo','Bar')

Ваш ответ на вопрос