>>705-706
グローバル変数だと強制的に初期化されて、
ローカル変数だと初期値があれば初期化される、だったような。
>>707
右から読んでもその文字が初出かどうか分からないような。
1パスで処理する(↓)ことも出来なくはないけどバッファが必要になるし、
バッファの最大長が条件によってほぼ入力長になるから実質2パスになる。
バッファ内での走査を許せばバッファ長はちょっと節約できるけど、雀の涙だしなぁ…
(function(input){
  var output="",buffer="",chrdat={},i,c,b;
  for(i=0;i<input.length;i++){
    c=input.charCodeAt(i);
    buffer+=input.charAt(i);
    if(!chrdat[c]){chrdat[c]={ic:1,oc:0};continue;}
    chrdat[c].ic++;
    while(buffer.length && chrdat[b=buffer.charCodeAt(0)].ic>1){
      chrdat[b].oc++;
      if(chrdat[b].oc>1)output+=buffer.charAt(0);
      buffer=buffer.slice(1);
  }}
  while(buffer.length){
    chrdat[b=buffer.charCodeAt(0)].oc++;
    if(chrdat[b].ic==1||chrdat[b].oc>1)output+=buffer.charAt(0);
    buffer=buffer.slice(1);
  }
  return output;
})("Hello, world")//("Hello, world"+"Hello, world"+"Hello, world")