IIFE , which needs to access the non-overlapping window object, can be seen as:
something like ( jQuery example):
$(function (global){ // do something with global })( window );
But sometimes I also see this: ( underscore.js )
(function() { var global= this; // do something with global }).call(this);
Question 1 : is there any difference / if so, when should I use each?
Question 2 : this inside IIFE is a window. why did you need to "send" window / "call (this)"? (jQuery does not use imho strict mode)
N.B.
It seems that jQuery since 1.11.0 also added this pattern:
(function (global, factory) { //.... }(typeof window !== "undefined" ? window : this, function (window, noGlobal) { //... });
source share