6

windowを介してグローバルに変数を宣言するのはかなり初めてなので、次のスニペットがブラウザーによって異なる動作をすることに少し驚きました。

window.test = "Good";
document.write(window.test);
document.write('<br>');
document.write(window.test);
document.write('<br>');
document.write(test);​

Firefox、IE、オペラ

良い

未定義

良い

クロームとサファリ

良い

良い

良い

私の最初の信念は、Chrome や Safari と同じように動作するはずだったのですが、 windowオブジェクトを正しく理解していない可能性があることに気付いたので、詳しい人がこれを説明してくれませんか?

var test = "Good";そのスコープに使用できることはわかっていますが、ブラウザーがそれを異なる方法で処理する理由に興味があります。

http://jsfiddle.net/WHYFc/

4

2 に答える 2

1

JSFiddle は window.load を使用してスクリプトを作成しています。

document.write ロード後にドキュメントをクリア/ワイプするので、これらのブラウザでは正常に表示され、Webkit はより寛大になります。

jsfiddle で生成するコードは次のとおりです。

window.addEvent('load', function() {
window.test = "Good";
document.write(window.test);
document.write('<br>');
document.write(window.test);
document.write('<br>');
document.write(test);
});

フィドルを head または body に変更すると、期待どおりに動作します

デモ

于 2012-10-19T05:18:42.510 に答える
0

新しいドキュメントを開いているにもかかわらず、何かをグローバルに保存したい場合は、(ちょっと皮肉なことに)document永続的に見えるオブジェクトを使用できます。

document.test = "Good";

document.write(document.test); // > "Good"
document.write('<br>');
document.write(document.test); // > "Good"
document.close();

setTimeout(() => {
    document.write("Also " + document.test); // > "Also Good"
    document.close();
}, 2000);
于 2016-08-24T23:34:25.860 に答える