1

同じ名前とスコープを持つ2つの変数を宣言するとどうなりますか?

var foo = (function() {
    return {
        alertMe: function() {
            alert("foo1");
        }
    }
})();

var foo = (function() {
    return {
        alertMe: function() {
            alert("foo2");
        }
    }
})();

foo.alertMe();

Webサイトに小さなポートレットを動的にロードしていて、各ポートレットにはJavaScriptモジュールを備えた独自のスクリプトタグがあるため、質問しています。問題は、ユーザーがポートレットを複製できることです。これは、上記のようなことが起こる可能性が高いことを意味します。

4

3 に答える 3

6

あなたの例では、どちらも未定義なので、値は。になりundefinedます。

とにかく、2番目varは無視されます。持っていなかった場合と同じ結果が得られますfoo。つまり、新しい値で上書きされます。

したがって、次の場合と同じ結果になります。

var foo = (function() {
    alert("foo1");
})();

foo = (function() {  // I'm overwriting the value of "foo"
    alert("foo2");
})();

編集:質問のコードが変更されました。コードを実行すると、結果がより観察しやすくなります。最初のオブジェクトへのfoo変数の参照は、2番目のオブジェクトへの参照に置き換えられます。最初の参照は失われます。

于 2011-01-13T03:57:39.893 に答える
0

あなたの例では、最初の変数は無視されます `var foo = (function() { alert("foo1"); })();

foo = (function() { // "foo" の値を上書きします alert("foo2"); })(); `

于 2011-01-13T04:08:06.057 に答える
0

この問題を回避するには、異なるモジュールの Java スクリプトを異なる名前空間にカプセル化します。

名前空間の説明

あなたも見ることができます

JavaScript で名前空間を宣言するにはどうすればよいですか?

于 2011-01-13T04:27:24.727 に答える