I have some questions about jquery plugin - bootstrap-popover.js.

1. !function ($){ // meaning?
2. some lines have no semicolon and comma, why?
3. }(window.jQuery); // meaning?

---

```
!function ($) { //<--- 1. what does this line mean?

      "use strict"; // jshint ;_;

      var Popover = function (element, options) {

        this.init('popover', element, options) //<-- 2. this line has no semicolon, why...?

      }

      Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype, {
        ..................................
      })

      var old = $.fn.popover

      $.fn.popover = function (option) {
        return this.each(function () {

          var $this = $(this)
            , data = $this.data('popover')
            , options = typeof option == 'object' && option

          if (!data) $this.data('popover', (data = new Popover(this, options)))

          if (typeof option == 'string') data[option]() // <-- 3. this line has no semicolon no comma, why...?

        })

      }
    .......................................

    }(window.jQuery); // <-- 4. what does this line mean?

```