I have a IIFE function in a file called test.js i.e.
(function mainIIFE() {
"use strict";
var print_name = function(first, last) {
console.log(first + " " + last);
};
}());
How would I call print_name in an html file. In my head, I have
<head>
<script type="text/javascript" src="test.js"></script>
</head>
and
<script>
new print_name("Bob", "Downs");
</script>
later on in my html file.
But when I try to run, it's not recognizing the print_name function.
Since you declare print_name
with var
, its scope is local to the IIFE, so you can't call it from outside there. You need to assign to window.print_name
to make it global.
(function mainIIFE() {
"use strict";
window.print_name = function(first, last) {
console.log(first + " " + last);
};
}());
It's also not clear why you're using new
to call the function, since it doesn't fill in an object.
You can return the function and store it in a variable. This is essentially the same as assigning it to window.print_name
inside the IIFE since the new variable will be in global 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')