code: function each (iterable, fn) {
          var len
              , i = 0
              , iter
              , item
              , ret
          ;
  
          if (!iterable) throw genTypeError($invalidArgument);
  
          var gen = iterable[Symbol[$iterator]];
          if (isFunction(gen))
              iter = gen.call(iterable);
          else if (isFunction(iterable.next)) {
              iter = iterable;
          }
          else if (isInstanceOf(iterable, Arr)) {
              len = iterable.length;
              while (i < len) {
                  fn(iterable[i], i++);
              }
              return i;
          } else
              throw genTypeError($invalidArgument);
  
          while (!(item = iter.next()).done) {
              ret = genTryCatcher(fn)(item.value, i++);
              if (ret === $tryErr) {
                  isFunction(iter[$return]) && iter[$return]();
                  throw ret.e;
              }
          }
  
          return i;
      }
docs: Generate a iterator
  @param  {Any} obj
  @private
  @return {Object || TypeError}