グローバルコンテキストでビルトインオブジェクト/関数と同名のものを定義した場合の動作

下記のようなページを実行すると、Firefox11とIE8だとエラーになって、Chrome18だとエラーとならずにalertが実行されました。

<html>
  <body>
    <script type="text/javascript">
var alert = alert;
alert(1);
    </script>
  </body>
</html>

Firefox、IEの動作だと、var宣言された時点で、右辺のその変数が未定義扱いとなっているようです。


もともとは、下記のようなコードがFirefoxで動作しなくて気がつきました。
(これはグローバルコンテキストで実行された場合で、関数内なら意図した動作(window.URLが代入)になります)

var URL = window.URL || window.webkitURL;