13

次の html ファイルが IE でデフォルトとしてタイトルを表示するのはなぜですか? 他のブラウザでは、タイトルが mytitle として表示されます。

<script>
window.mylib = window.mylib || {};
mylib.title = 'mytitle';
</script>

<script>
var mylib = mylib || {};
document.title = mylib.title || 'default';
</script>

IE はスクリプト タグごとに個別のスコープを作成しますか?

それは単なるバグですか、それともなぜ動作が異なるのですか?

(IE8 および最新の chrome/ff/opera でテスト済み)

4

3 に答える 3

3

HTML<script>タグ Javascript は のスコープで実行されますwindow。したがって、分離されたスクリプト タグは同じスコープで実行されます。

特に IE7 では、2 回目に変数を再定義しないようにしてください。

それ以外の

var mylib = mylib || {};

使用する

mylib = window.mylib || {};

mylibIE7 は、検出されたときの定義をおそらく上書きしますvar mylib

于 2013-08-12T12:48:57.087 に答える
3

スコープは問題になりません。それぞれ<script>が同じグローバル スコープ内で評価される必要があります。

ただし、window.mylib = ...IE8 では実際の宣言とは見なされないようです。したがって、それに続く avar mylibは、オーバーライド/リセットを に引き起こしますundefined

<script>
  window.mylib = {};
</script>

<script>
  console.log(typeof window.mylib); // object
</script>

<script>
  var mylib;
  console.log(typeof window.mylib); // undefined
</script>

var mylibどちらかまたはwindow.mylib全体を使用すると、期待どおりに機能するはずです。問題は混合物だけのようです。

<script>
  var mylib = mylib || {};
  mylib.title = 'mytitle';
</script>

<script>
  var mylib = mylib || {};
  document.title = mylib.title || 'default'; // 'mytitle'
</script>
于 2013-08-12T13:00:51.610 に答える