В чем смысл неопределенной переменной в шаблоне модуля javascript

Я сталкиваюсь со следующим шаблоном модуля javascript, и он мне очень нравится, но зачем использовать undefined в аргументе?

(function(window, document, undefined){

    'use strict';

    var MyWidget = function(){

        if (!(this instanceof MyWidget)) {
            var test = new MyWidget();
            return test.init.call(test, Array.prototype.slice.call(arguments));
        }

      var firstPrivateVar = 'aa',
          secondPrivateVar = 'bb';

      this.init = function(options){
        console.log('MyWidget.init', options);
        return true;
      };

      this.setStuff = function(){

      };

    };

    window.MyWidget = MyWidget;

})(window, document);  

person Ryan    schedule 12.09.2014    source источник
comment
зачем проходить в окно и документ?? они не всегда доступны?   -  person olefrank    schedule 31.07.2015


Ответы (2)


В ECMAScript 3 разработчик имел право использовать ключевое слово undefined в качестве переменной, т.е. оно было изменяемым. Итак, если бы я написал

undefined = true;

значение undefined было бы истинным, и оно потеряло бы свой истинный смысл. В этом вышеупомянутом сценарии мы передаем объект окна, объект документа и третьего параметра нет. так что это означает, что в function(window, document, undefined) неопределенная переменная будет фактически неопределенной, поскольку мы не передаем ей никаких параметров.

Согласно ECMAScript5, это значение undefined больше не может быть изменено.

person Vivin Bangera    schedule 12.09.2014

undefined может быть перезаписан в некоторых браузерах. Это устраняет проблему в вашей области, переопределяя undefined на значение несуществующего параметра.

person Rob M.    schedule 12.09.2014