As your scripts may be used together with some other scripts you can’t influence/change, you should always prefix your immediate functions with a semicolon—here’s why.
Let’s assume the following function is stored within vendor.js
…
var someVendorFunction = function () {
console.log(arguments);
}
…and your own scripts (wrapped in a immediate function) are stored within app.js
…
(function (window, undefined) {
window.app = {};
})(window);
As the variable declaration within vendor.js
is missing a semicolon at its end (e.g. as a result of minification or by relying on JavaScript’s semicolon insertion), your function gets directly appended to the incomplete variable declaration, resulting in an error.
Uncaught TypeError: undefined is not a function
As you’re not able to control scripts that get concatenated together with your scripts, the best way to prevent such errors is to prefix your immediate functions with a semicolon.
;(function (window, undefined) {
window.app = {};
})(window);