Неясная конструкция js

118
14 февраля 2019, 06:30

Всем привет! Ребята, учусь js, разбирая плагин dropzone.js. В ходе разбора натолкнулся на такую конструкцию:

{
        key: "emit",
        value: function emit(event) {
            this._callbacks = this._callbacks || {};
            var callbacks = this._callbacks[event];
            if (callbacks) {
                for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
                    args[_key - 1] = arguments[_key];
                }
                for (var _iterator = callbacks, _isArray = true, _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {
                    var _ref;
                    if (_isArray) {
                        if (_i >= _iterator.length) break;
                        _ref = _iterator[_i++];
                    } else {
                        _i = _iterator.next();
                        if (_i.done) break;
                        _ref = _i.value;
                    }
                    var callback = _ref;
                    callback.apply(this, args);
                }
            }
            return this;
        }

Кто нибудь может сказать в чем смысл выражения:

_iterator = _isArray ? _iterator : _iterator[Symbol.iterator]() ?

Ведь согласно условию: _isArray = true, ветка else в выражении

  if (_isArray) {
        if (_i >= _iterator.length) break;
               _ref = _iterator[_i++];
   } else {
        _i = _iterator.next();
        if (_i.done) break;
        _ref = _i.value;
   }

никогда не будет достигнута.

Answer 1

Судя по предоставленному коду, речь идет про github.

Однако на самом деле разработка ведется на gitlab, о чем указано в readme:

This is no longer the official repository for Dropzone. I have switched to gitlab.com as the primary location to continue development.

Что на самом деле происходит в коде?

Указанные строки находятся в месте объявления класса Emitter, а конкретнее в реализации метода emit

Если пройти на gitlab увидим простой метод:

emit(event, ...args) {
    this._callbacks = this._callbacks || {};
    let callbacks = this._callbacks[event];
    if (callbacks) {
      for (let callback of callbacks) {
        callback.apply(this, args);
      }
    }
    return this;
}

Из которого явно видно, что данный код является реализацией for..of после сборки.

READ ALSO
Вызвать фрагмент кода в функции JS

Вызвать фрагмент кода в функции JS

Есть код в листинге 1 и есть функция в листинге 2Оба фрагмента находятся в одном файле и фрагмент из листинга 1 хорошо отрабатывает в других...

158
Не заполняется &lt;li&gt; с классом при помощи javascript

Не заполняется <li> с классом при помощи javascript

Хочу чтобы программа определяла день недели и заполняла расписание в связи с этим, но она заполняет только div, а li не заполняет, что не так?

161