whole_func_string: function xEachArray(option, success, picker) {
          var index,
  
              i = 0,
              reverse = 1,
              length = this.length,
              start = option.start ? Number(option.start) : 0,
              limit = option.limit === undefined ? length : Number(option.limit);
  
  
          if (limit <= 0) {
              limit = length;
          }
  
          if (start < 0) {
              start = length + start;
          }
  
          if (start + limit > length) {
              limit -= start + limit - length;
          }
  
          if (start < 0) {
              start = 0;
              limit = length;
          }
  
          if (option.reverse) {
              reverse = -1;
              start -= length + reverse;
          }
  
          for (; i < limit; i += 1) {
              try {
                  index = (i + start) * reverse;
  
                  success.call(option.self, this[index], index, picker);
              } catch (e) {
                  if (e instanceof Break) {
                      if (option.limit && (option.reverse || (index < length && limit < length))) {
                          limit += 1;
                      }
                  } else if (e instanceof End || index < 0) {
                      return this;
                  } else {
                      throw e;
                  }
              }
          }
  
          return this;
      }
func_code_string: function xEachArray(option, success, picker) {
          var index,
  
              i = 0,
              reverse = 1,
              length = this.length,
              start = option.start ? Number(option.start) : 0,
              limit = option.limit === undefined ? length : Number(option.limit);
  
  
          if (limit <= 0) {
              limit = length;
          }
  
          if (start < 0) {
              start = length + start;
          }
  
          if (start + limit > length) {
              limit -= start + limit - length;
          }
  
          if (start < 0) {
              start = 0;
              limit = length;
          }
  
          if (option.reverse) {
              reverse = -1;
              start -= length + reverse;
          }
  
          for (; i < limit; i += 1) {
              try {
                  index = (i + start) * reverse;
  
                  success.call(option.self, this[index], index, picker);
              } catch (e) {
                  if (e instanceof Break) {
                      if (option.limit && (option.reverse || (index < length && limit < length))) {
                          limit += 1;
                      }
                  } else if (e instanceof End || index < 0) {
                      return this;
                  } else {
                      throw e;
                  }
              }
          }
  
          return this;
      }
func_documentation_string: call of each Array items with {@linkcode module:BaseJS.utilTick|(async) Crisp.utilTick}
  and execute <code>option.success</code> and/or <code>option.complete</code> with {@linkcode module:BaseJS.utilTick|(async) Crisp.utilTick}
  
  @function external:Array.prototype.xEach
  
  @param {external:Object}         option
  @param {util.utilTickCallback}   option.success          callback function for execute each item with {@linkcode module:BaseJS.utilTick|(async) Crisp.utilTick}
  @param {AnyItem}                 [option.self]           use Object for .call() the <code>option.success</code> an <code>option.complete</code> function
  @param {util.utilTickCallback}   [option.complete]       callback function for exeute on the end of xEach with {@linkcode module:BaseJS.utilTick|(async) Crisp.utilTick}
  @param {external:Boolean}        [option.async]          enable asynchronus for call of each Array items with {@linkcode module:BaseJS.utilTick|(async) Crisp.utilTick}
  @param {external:Number}         [option.start=0]        start index of each
  @param {external:Number}         [option.limit=length]   limit items of each
  
  @this external:Array
  @return {external:Array}
  
  @tutorial {@link http://opencrisp.wca.at/tutorials/BaseJS-xEach_test.html#array|use Array.xEach}
  @tutorial {@link http://opencrisp.wca.at/tutorials/BaseJS-xEach_test.html#array-option-start|use Array.xEach( start )}
  @tutorial {@link http://opencrisp.wca.at/tutorials/BaseJS-xEach_test.html#array-option-limit|use Array.xEach( limit )}
  
  @example
  ['A','B'].xEach({
  success: function( item, index ) {
  // return; go to the next item
  // throw new Break(); stop each of items
  console.log('success:', index, item );
  },
  complete: function() {
  console.log('complete');
  }
  });
  console.log('end');
  // logs:
  // success: 0 A
  // success: 1 B
  // complete
  // end
  
  
  @example
  // async
  ['A','B'].xEach({
  async: true,
  success: function( item, index ) {
  // return; go to the next item
  // throw new Break(); stop each of items
  console.log('success:', index, item );
  },
  complete: function() {
  console.log('complete');
  }
  });
  console.log('end');
  // logs:
  // end
  // success: 0 A
  // success: 1 B
  // complete