質問するログイン新規登録

回答編集履歴

3

見出しを修正。関数宣言\(FunctionDeclaration\)と関数定義\(Function Definitions\) -> 関数宣言\(FunctionDeclaration\)と関数式\(Functio

2017/08/25 03:39

投稿

think49
think49

スコア18194

answer CHANGED
@@ -125,7 +125,7 @@
125
125
  また、「ユーザ定義関数(User-defined function)」という言葉はありますが、「ユーザ宣言関数(user-declared function)」という言葉は読んだ覚えがありません。
126
126
  これも宣言してから定義するという順番性を表しているのかもしれません。
127
127
 
128
- ### 関数宣言(FunctionDeclaration)と関数定義(Function Definitions)
128
+ ### 関数宣言(FunctionDeclaration)と関数(FunctionExpression)
129
129
 
130
130
  - [14.1 Function Definitions - ECMAScript® 2017 Language Specification](http://www.ecma-international.org/ecma-262/8.0/#sec-function-definitions)
131
131
 
@@ -169,5 +169,6 @@
169
169
  ### 更新履歴
170
170
 
171
171
  - 2017/08/21 11:41 「関数宣言(FunctionDeclaration)と関数定義(Function Definitions)」の節を追記
172
+ - 2017/08/25 12:38 見出しを修正。関数宣言(FunctionDeclaration)と関数定義(Function Definitions) -> 関数宣言(FunctionDeclaration)と関数式(FunctionExpression)
172
173
 
173
174
  Re: COCO-nuts さん

2

関数宣言\(FunctionDeclaration\)と関数定義\(Function Definitions\)

2017/08/25 03:39

投稿

think49
think49

スコア18194

answer CHANGED
@@ -125,4 +125,49 @@
125
125
  また、「ユーザ定義関数(User-defined function)」という言葉はありますが、「ユーザ宣言関数(user-declared function)」という言葉は読んだ覚えがありません。
126
126
  これも宣言してから定義するという順番性を表しているのかもしれません。
127
127
 
128
+ ### 関数宣言(FunctionDeclaration)と関数定義(Function Definitions)
129
+
130
+ - [14.1 Function Definitions - ECMAScript® 2017 Language Specification](http://www.ecma-international.org/ecma-262/8.0/#sec-function-definitions)
131
+
132
+ 上記リンク先では、大別して次の2つの Syntax が定義されています。
133
+
134
+ - 関数宣言 (FunctionDeclaration)
135
+ - 関数式 (FunctionExpression)
136
+
137
+ 関数定義は関数宣言と関数式を総合した名称です。
138
+ 従って、**「関数定義 === 関数宣言」ではありません**し、関数宣言と関数式は別個の存在として定義されています。
139
+
140
+ ```JavaScript
141
+ function foo () { console.log('foo'); }
142
+ ```
143
+
144
+ 上記コードは関数宣言(FunctionDeclaration)を定義しています。
145
+
146
+ ```JavaScript
147
+ (function bar () {
148
+ console.log('bar');
149
+ }());
150
+ ```
151
+
152
+ 上記コードは関数式(FunctionExpression)を定義しています。
153
+
154
+ ```JavaScript
155
+ var piyo = function piyo () {
156
+ console.log('piyo');
157
+ };
158
+ ```
159
+
160
+ 上記コードは関数式を定義した後に変数 piyo を定義しています。
161
+
162
+ 「変数文」と「関数式」の定義が独立している点に注意して下さい。
163
+ 厳密には、変数文の処理過程で変数宣言が行われている事になります(詳細は「定義する」の節を参照して下さい)。
164
+
165
+ 1. 関数式 piyo を定義する
166
+ 2. 変数 piyo を宣言する
167
+ 3. 変数 piyo を定義する
168
+
169
+ ### 更新履歴
170
+
171
+ - 2017/08/21 11:41 「関数宣言(FunctionDeclaration)と関数定義(Function Definitions)」の節を追記
172
+
128
173
  Re: COCO-nuts さん

1

関数宣言を定義する

2017/08/21 02:42

投稿

think49
think49

スコア18194

answer CHANGED
@@ -70,8 +70,8 @@
70
70
  - [14.1 Function Definitions - ECMAScript® 2017 Language Specification](http://www.ecma-international.org/ecma-262/8.0/#sec-function-definitions)
71
71
 
72
72
  ここから読み取れるのは、宣言してから定義するという順番性です。
73
- 「関数宣言を定義する」とは、関数を「宣言」する事で「定義」が完了しています。
73
+ 「関数宣言を定義する」とは、関数を「宣言」する事で「定義」が完了する事を表しています。
74
- ですので、「関数定義を宣言する」のように逆の意味にすることは出来ません。
74
+ ですので、「関数定義を宣言する」のように逆の順番で表現することは出来ません。
75
75
 
76
76
  ### 定義する (define)
77
77