概要
javascriptの関数の特徴として、関数プロパティと呼ばれるものがあります。
この関数プロパティについて、試してみます。
関数プロパティについて
関数プロパティは、関数に対してプロパティを持つことをいい、Functionオブジェクトに対してプロパティを付与することで実現します。
こうすることで関数の実行後にも値が保持できる静的変数を持つことができます。
また、この静的変数については関数を呼び出し時にも使うことができます。
具体的にコードを書いて試します
次のコードを書きます。
function test1() { //関数プロパティの値に対して作用するコードを書く //(例:文字列の連結) return test1.teststring + "def"; } //通常の関数呼び出し console.log(test1()); //関数プロパティとして「teststring」を定義し、文字列を代入する test1.teststring = "abc"; //関数プロパティに文字列を代入した後の、出力 console.log(test1());
少し荒い書き方ですが、関数test1に対して、通常の呼び出しと、関数プロパティの定義と、それに対しての処理(文字列連結)をした後の、関数呼び出しを書いてみました。
実行結果は次のようになります。
undefineddef abcdef
最初の1行目の「undefineddef」は、通常の関数呼び出しを行うタイミングでは、関数プロパティの定義すらしていないので、ごく当たり前の出力結果といえます。
未定義のプロパティ「undefined」に対して、文字列「def」が連結されています。
次に出力された「abcdef」については、関数プロパティに定義された値が呼び出されているので、単純に文字列が連結された結果が出力されています。
グローバル変数との違い
この関数プロパティの動きを見てみると、グローバル変数ができることと同じ動きになります。
実際には、グローバル変数の使いどころを見極める必要があり、グローバル変数名の重複や、ロジックが複雑になる場合があるので、シンプルなコードを書く場面で関数プロパティを使うと良いと考えることができます。