function StringConcat(other /* and more */) {  // length == 1
  "use strict";
  CHECK_OBJECT_COERCIBLE(this, "String.prototype.concat");
  var s = TO_STRING(this);
  var len = arguments.length;
  for (var i = 0; i < len; ++i) {
    s = s + TO_STRING(arguments[i]);
  }
  return s;
}
function StringConcat(other ) {  
  "use strict";
  CHECK_OBJECT_COERCIBLE(this, "String.prototype.concat");
  var s = TO_STRING(this);
  var len = arguments.length;
  for (var i = 0; i < len; ++i) {
    s = s + TO_STRING(arguments[i]);
  }
  return s;
}
function StringConcat ( other /* and more */ ) { // length == 1 "use strict" ; CHECK_OBJECT_COERCIBLE ( this , "String.prototype.concat" ) ; var s = TO_STRING ( this ) ; var len = arguments . length ; for ( var i = 0 ; i < len ; ++ i ) { s = s + TO_STRING ( arguments [ i ] ) ; } return s ; }
ECMA-262, section 15.5.4.6
ECMA - 262 section 15 . 5 . 4 . 6