OperaのURL変更とタイマー

Operaでタイマーが効かなくなる場合がある、と以前書いたが*1、その動作条件が分かった。
URLハッシュを変更した後にタイマーを設定すると、失敗するようだ(URLのハッシュ以外の所を変えると画面が遷移してしまうのでタイマーもすべて意味をなさなくなるが、URLのハッシュのみを変えると画面は遷移しない)。

function testcall(){
  alert("呼ばれませんよ");
}
function test(){
  location.hash = "#test";
  timerid = setTimeout(testcall,100);
}

このようなスクリプトの場合、いくら test を呼んでも testcall は呼ばれず、timerid は 0 を返す。
で、URLハッシュの変更をタイマー設定の後にすると、タイマーは動作するようだ。

function testcall(){
  alert("呼ばれますよ");
}
function test(){
  timerid = setTimeout(testcall,100);
  location.hash = "#test";
}

意味が分からん。まあ「かなり特殊な場合」なんだけど、「ポテトはいかがですか」はその特殊な状況に陥っていた。