7

私は index.html に以下を持っています:

<html><body><pre>
<script src="program.js"></script>
</pre></body></html>

そして、program.js の次の内容:

document.writeln(JSON.stringify(name));
name = "Bob";

初めて index.html を開くと、これが生成されます (出力 A):

> ""

次に、ページを更新した後、これが生成されます (出力 B):

> "Bob"

Firefox で出力 B が表示されることはありません。

Chrome に戻ります: ただし、「val」などの「name」以外の変数を使用する場合:

document.writeln(JSON.stringify(val));
val = "Bob";

例外があります:

Uncaught ReferenceError: val is not defined 

したがって、'name' はたまたまグローバル スコープにあるため、Chrome は古いページの読み込みからグローバル変数を何らかの形で記憶し、新しいページの読み込みでそれらの変数のデフォルト値を設定していると考えました。しかし、代わりにグローバル変数「ステータス」を使用すると、常に出力 A が表示されます。

なぜこうなった?

4

1 に答える 1

2

グローバルコンテキストのname変数は、クロムで予約された名前のようなものです。status値のみを取ることができるなどの変数にも同じことが当てはまりStringます。

このname属性は、ウィンドウ オブジェクトの名前を参照します。この名前は、ウィンドウが有効である限り保持されるため、値は複数のドキュメント間で共有されます。

例:も同じvar status = {}; alert(status)ように警告します。[Object object]name

この動作を提供するための参照ドキュメントはありませんが、私のプロジェクトのバグレポートの結果として気づいたことがあります。

于 2013-01-10T03:28:53.380 に答える