アプリ版:「スタンプのみでお礼する」機能のリリースについて

var Figure;
Figure = (function() {
function Figure() {}
Figure.pi = 3.14;
Figure.square = function(base, height) {
return base * height;
};
return Figure;
})();

alert(Figure.pi);
alert(Figure.square(3,4));

というJavascriptのソースがあり、3.14と12がアラートで出てくるんだと思うのですが、
function Figure() {}
の行の意味がわからないでおります。
中身のない2種類のかっこがあるうえにこの行にはセミコロンもなく、なにかの宣言をしているのかどうかもわからないでおります。

ご教示いただけると助かります。

質問者からの補足コメント

  • ありがとうございます。無名関数とかはだいぶ自分にとってややこしいですが、
    だいぶわかってきました。

    なかのfunction Figure() {}は無名関数のなかで生成する名前付き関数で
    その実行結果をFigureにかえしています。

    となると、function Figure() {}はセミコロンがないのですが
    この一行で一応文は完結しているのでしょうか?

    No.1の回答に寄せられた補足コメントです。 補足日時:2018/03/19 10:18

A 回答 (2件)

確かにちょっとわかりにくい内容ですね


なかのfunction Figure() {}は無名関数のなかで生成する名前付き関数で
その実行結果をFigureにかえしています。

var x;
y = function() {
function z() {}
z.pi = 3.14;
z.square = function(base, height) {
return base * height;
};
return z;
};
x=y();
alert(x.pi);
alert(x.square(3,4));
ということです。
例題はxとzが同じ名前を振っているのでわかりにくいのです

実際にはこうするほうがよいでしょう。
var Figure=new function(){
this.pi = 3.14;
this.square = function(base, height) {
return base * height;
};
};
alert(Figure.pi);
alert(Figure.square(3,4));
この回答への補足あり
    • good
    • 0

> function Figure() {}はセミコロンがないのですが



javascriptは理論的に区切られているのであればセミコロンなしの
改行が文の終わりを示すことができます
特に{}は論理的な区切りをさすのでforやwhileなどのループ構造でも
一般的にセミコロンはつけないですよね?
    • good
    • 0
この回答へのお礼

了解しました。ありがとうございます!
自分の持っているjavascriptの本は無名関数とかまでは触れていないので
本来はそこまで解説されている本を自分で読まねばならないところですが・・・

お礼日時:2018/03/19 10:50

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!