1. JavaScript / Говнокод #19651

    −1

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    9. 9
    (function (angular, $, undefined) {
      'use strict';
      if ($.fn['nanoScroller'] === undefined) {
        throw new Error("nanoScrollerJS is not defined in jQuery");
      }
    
    ...
    
    }(angular, jQuery));

    Запостил: kzmpianist, 17 Марта 2016

    Комментарии (15) RSS

    • Что означает undefined в списке параметров?
      Ответить
      • означает что имя переменной может совпадать с именем встроенного типа (ну и с литералом единственного значения этого типа)
        Ответить
        • А он разве встроенный?
          Ответить
          • Лол. undefined можно юзать как /dev/null...

            http://ideone.com/7I194U
            Ответить
            • Годно. Замечу, что не локальный undefined: http://ideone.com/KDLyBB

              P. S.
              var dev = { set null(x) {} };
              Ответить
              • Там ещё лол - если в своём объекте сделать поле undefined, то оно нормально работает. А вот window.undefined - всегда undefined.
                Ответить
                • Полезно, что в объектах ключевые слова в качестве ключей не вызывают ошибку. Многие жаловались на неработающий for для объектов:
                  > var js = {};
                  > js.for = (o, f) => Object.keys(o).forEach((k, i) => f(k, i, o));
                  > js.for({x: 2, y: 3}, console.log.bind(console));
                  x 0 Object {x: 2, y: 3}
                  y 1 Object {x: 2, y: 3}
                  Ответить
                  • А вот и оператор var, обеспечивающий строгую типизацию и почти паскалевскую запись "name:type = value":
                    js.throw = e => { throw new Error(e) }
                    js.var = (name, type, value) => type(value) === value ?
                       window[name] = value : js.throw('Pituization error!')
                    Ответить
                    • А если их в window напихать, а потом юзать без объекта, то кейворды всё-таки пересилят?
                      Ответить
                      • Пересиливают, к сожалению. А жаль, так бы мы почти получили универсальный язык, о котором говорили в соседнем треде.
                        Ответить
                        • Зато можно window заменять на this в глобальном контексте для сокращения
                          function FakeWindow(c) { this.counter = c; }
                          FakeWindow.prototype = window;
                          window.valueOf = function() { return this.counter || 1; }
                          Object.defineProperty(window, 'this', { get: function(){
                            return new FakeWindow((this.counter||1)+1) }})
                          
                          >+this
                          1
                          >+this.this
                          2
                          >+this.this.this
                          3
                          Ответить
                          • Хотя, можно пойти дальше:
                            (function extend(o, l) {
                              Object.defineProperty(o, 'this', {
                                get: O => extend(O = (x, y) => y ? o(x, O(x, y - 1)) : l ^ 1)
                              });
                              return o;
                            })(this.this = (x, y) => x + y, 1);


                            > this.this(2,3)
                            5
                            > this.this.this(2,3)
                            6
                            > this.this.this.this(2,3)
                            8
                            > this.this.this.this.this(2,3)
                            16
                            Ответить
          • конечно

            поди-ка ecma 262 почитай
            вещь по-сильнее фауста

            там пишут, например, что есть такой тип -- undefined
            и что у него может быть одно значение: undefined
            Ответить
      • Как видно в анонимную функцию 3 параметр не передаётся, но почему то в аргументах принимается undefined, зачем если undefined и так есть undefined?
        Ответить
        • Кроме того, что сказал гость в #comment317111, этот undefined можно сократить до 'u', когда обычный undefined ужимается только до 'void 0'.
          Ответить

    Добавить комментарий