• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:newでコンストラクタ関数が受け取った引数の行き先)

newでコンストラクタ関数が受け取った引数の行き先

このQ&Aのポイント
  • Test1とTest2で何が違うのでしょうか?
  • Test1のtenは、this.scoreで生成するインスタンスプロパティへ格納 Test2のtenは、どうなっているのでしょうか?
  • どこへも格納していないのに、「new Test2('100');」で文が終わった後、呼び出せている理由は?

質問者が選んだベストアンサー

  • ベストアンサー
  • sample_
  • ベストアンサー率76% (20/26)
回答No.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 するケースでは生成したオブジェクトからしかアクセスできないから クロージャーとかとは別のお話になりますが・・・

re97
質問者

お礼

回答ありがとうございました。 大変参考になりましたー

関連するQ&A