以下で➀と➁のように同じ変数名でlet
を宣言したとします。
なぜ➁がある場合に、結果から「元のデータ」のobj1
がなくなるのでしょうか?
Javascript
1const obj1 = {initdata:'元のデータ'}; 2let obj2 = {}; // ➀ 3 4if( true ){ 5 6 let obj2 = {}; // ➁ 7 8 if( true ){ 9 obj2 = obj1; 10 } 11 12} 13 14obj2.newdata = '追加されたデータ'; 15console.log(obj2);
上記の➁を削除するときちんと「元のデータ」のobj1
があります。
つまり➁がobj1
を削除する要因になっているのですが、なぜなのかわかりません。
だって➁はobj2
を初期化して空のオブジェクトとして扱っているだけで、その下のobj2 = obj1
によってobj2
にはobj1
が入るはずですから、obj1
を削除する要因になるという理屈が理解できないのです。
・なぜ➁があると、obj2 = obj1
による代入が、最後のobj2
に効かないのか?(➀の宣言に対して効かないのか?)
・なぜ➁がないと、obj2 = obj1
による代入が、最後のobj2
に効くのか?(➀の宣言に対して効くのか?)
という方向でご解説頂けましたら幸いです。(➁の有無で、➀の宣言に対して効いたり効かなかったり、とスコープの範囲が変わる点が納得いきません)
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/10/09 04:05
2020/10/09 04:39 編集