- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:newでコンストラクタ関数が受け取った引数の行き先)
newでコンストラクタ関数が受け取った引数の行き先
このQ&Aのポイント
- Test1とTest2で何が違うのでしょうか?
- Test1のtenは、this.scoreで生成するインスタンスプロパティへ格納 Test2のtenは、どうなっているのでしょうか?
- どこへも格納していないのに、「new Test2('100');」で文が終わった後、呼び出せている理由は?
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
■alert(this.score); var result1 = new Test1('100'); でten変数は、this.score に値を設定し どこからも参照されていないので消えます。 そして、result1.getScore(); でオブジェクト内にあるscoreの値を表示しています。 ■alert(ten); var result2 = new Test2('100'); でten変数は、値をセットすることはないけども、 function (ten) { 関数の内側にもう一つ関数が存在しており (getScoreの部分) そちらから参照されているため、newした処理の後消えることなく、getScoreから参照され続けることになります。 その結果、getScoreを呼んださいにtenの値が表示されることになります。 一般的に、スコープから抜けて本来消えるはずの変数が生き続け、 ある特定の関数からのみアクセス可能という状態をクロージャーと呼んでたりします。 原理的にはクロージャーの動きについて調べてみるとピンとくると思います。 ※注:new するケースでは生成したオブジェクトからしかアクセスできないから クロージャーとかとは別のお話になりますが・・・
お礼
回答ありがとうございました。 大変参考になりましたー