名前とスコープが同じ2つの変数を宣言するとどうなりますか?JavaScriptで同じ名前とスコープの2つの変数を宣言するとどうなりますか?
ウェブサイトに小さなポートレットを動的にロードしており、各ポートレットにはJavaScriptモジュールが付いた独自のスクリプトタグがあるので、私は尋ねています。問題は、ユーザーがポートレットを複製できることです。つまり、上記のようなことが起こる可能性があります。
名前とスコープが同じ2つの変数を宣言するとどうなりますか?JavaScriptで同じ名前とスコープの2つの変数を宣言するとどうなりますか?
ウェブサイトに小さなポートレットを動的にロードしており、各ポートレットにはJavaScriptモジュールが付いた独自のスクリプトタグがあるので、私は尋ねています。問題は、ユーザーがポートレットを複製できることです。つまり、上記のようなことが起こる可能性があります。
あなたの例では、どちらも定義されていないので、値はundefined
です。
とにかく、第2のvar
は無視されます。あなたが持っていなかったのと同じ結果になります。つまり、foo
は新しい値で上書きされます。
だから、あなたがしたかのように同じ結果:
はvar foo = (function() {
alert("foo1");
})();
foo = (function() { // I'm overwriting the value of "foo"
alert("foo2");
})();
EDIT:変更問題のコード。コードを実行すると結果がより顕著になります。 foo
変数の最初のオブジェクトへの参照は、2番目のオブジェクトへの参照に置き換えられます。最初の参照は失われます。 ();
最後の変数は、あなたの例で を動作する、最初のVARは `VAR fooが=(関数(){ アラート( "foo1のを")})は無視されます。
foo =(function(){//私は "foo"の値を上書きしています alert( "foo2"); })(); `
この問題を回避するには、異なるモジュールのJavaスクリプトを異なる名前空間にカプセル化します。
また、この問題が発生した正確に何である
で見ることができます:http://jsfiddle.net/Damien_at_SF/cQHRZ/ –