build/packer/base2.js
function _Array_forEach(array, block, context) {
  if (array == null) array = global;
  var length = array.length || 0, i; // preserve length
  if (typeof array == "string") {
    for (i = 0; i < length; i++) {
      block.call(context, array.charAt(i), i, array);
    }
  } else { // Cater for sparse arrays.
    for (i = 0; i < length; i++) {    
    /*@cc_on @*/
    /*@if (@_jscript_version < 5.2)
      if ($Legacy.has(array, i))
    @else @*/
      if (i in array)
    /*@end @*/
        block.call(context, array[i], i, array);
    }
  }
}
function _Array_forEach(array, block, context) {
  if (array == null) array = global;
  var length = array.length || 0, i; // preserve length
  if (typeof array == "string") {
    for (i = 0; i < length; i++) {
      block.call(context, array.charAt(i), i, array);
    }
  } else { // Cater for sparse arrays.
    for (i = 0; i < length; i++) {    
    /*@cc_on @*/
    /*@if (@_jscript_version < 5.2)
      if ($Legacy.has(array, i))
    @else @*/
      if (i in array)
    /*@end @*/
        block.call(context, array[i], i, array);
    }
  }
}
function _Array_forEach ( array , block , context ) { if ( array == null ) array = global ; var length = array . length || 0 , i ; // preserve length if ( typeof array == "string" ) { for ( i = 0 ; i < length ; i ++ ) { block . call ( context , array . charAt ( i ) , i , array ) ; } } else { // Cater for sparse arrays. for ( i = 0 ; i < length ; i ++ ) { /*@cc_on @*/ /*@if (@_jscript_version < 5.2)
      if ($Legacy.has(array, i))
    @else @*/ if ( i in array ) /*@end @*/ block . call ( context , array [ i ] , i , array ) ; } } }
These are the two core enumeration methods. All other forEach methods eventually call one of these two.
These are the two core enumeration methods . All other forEach methods eventually call one of these two .