From 75e5dcce1e3c6558a3a2d3def5c08669404587c4 Mon Sep 17 00:00:00 2001 From: Masahiro FUJIMOTO Date: Wed, 22 Sep 2021 00:52:17 +0900 Subject: Operators/function を更新 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Markdown に変換 - 2021/08/26 時点の英語版に同期 --- .../reference/operators/function/index.md | 166 +++++++++++---------- 1 file changed, 87 insertions(+), 79 deletions(-) (limited to 'files/ja/web') diff --git a/files/ja/web/javascript/reference/operators/function/index.md b/files/ja/web/javascript/reference/operators/function/index.md index a39cecb627..4bd7d85ccd 100644 --- a/files/ja/web/javascript/reference/operators/function/index.md +++ b/files/ja/web/javascript/reference/operators/function/index.md @@ -4,67 +4,68 @@ slug: Web/JavaScript/Reference/Operators/function tags: - Function - JavaScript - - Language feature - - Operator - - Primary Expressions - - 演算子 - 言語機能 + - 演算子 + - Primary Expressions +browser-compat: javascript.operators.function translation_of: Web/JavaScript/Reference/Operators/function --- -
{{jsSidebar("Operators")}}
+{{jsSidebar("Operators")}} -

function キーワードは、式の中で関数を定義するために使用されます。

+**`function`** キーワードは、式の中で関数を定義するために使用されます。 -

{{jsxref("Function/Function", "Function")}} コンストラクターや{{jsxref("Statements/function", "関数宣言", "", 1)}}を用いて関数を定義することもできます。

+{{jsxref("Function/Function", "Function")}} コンストラクターや{{jsxref("Statements/function", "関数宣言", "", 1)}}を用いて関数を定義することもできます。 -
{{EmbedInteractiveExample("pages/js/expressions-functionexpression.html", "shorter")}}
+{{EmbedInteractiveExample("pages/js/expressions-functionexpression.html", "shorter")}} - +## 構文 -

構文

+この式は文の先頭に置くことができません。 -
let myFunction = function [name]([param1[, param2[, ..., paramN]]]) {
-   statements
-};
+```js +function [name]([param1[, param2[, ..., paramN]]]) { + statements +} +``` -

ES2015 からは{{jsxref("Functions/Arrow_functions", "アロー関数", "", 1)}}も使えます。

+ES2015 からは{{jsxref("Functions/Arrow_functions", "アロー関数", "", 1)}}も使えます。 -

引数

+### 引数 -
-
name {{optional_inline}}
-
関数名。省略可能で、その場合は関数は無名になります。 name は関数本体のみのローカルです。
-
paramN {{optional_inline}}
-
関数に渡される引数の名前です。
-
statements {{optional_inline}}
-
関数の本体を構成する文です。
-
+- `name` {{optional_inline}} + - : 関数名。省略可能で、その場合は関数は*無名*になります。 name は関数本体のみのローカルです。 +- `paramN` {{optional_inline}} + - : 関数に渡される引数の名前です。 +- `statements` {{optional_inline}} + - : 関数の本体を構成する文です。 -

解説

+## 解説 -

関数式は関数宣言とよく似ており、ほとんど同じ書式でもあります (詳しくは {{jsxref("Statements/function", "function")}} 文を参照してください)。関数式と関数宣言の主な相違点は、関数名です。関数式では、無名関数を生成するために、関数名を省略できます。関数式は、定義するとすぐに実行する IIFE (即時実行関数)として使用できます。詳細については、{{jsxref("Functions", "関数", "", 1)}}の章を参照してください。

+関数式は関数宣言とよく似ており、ほとんど同じ書式でもあります (詳しくは {{jsxref("Statements/function", "function")}} 文を参照してください)。関数式と関数宣言の主な相違点は、*関数名*です。関数式では、*無名*関数を生成するために、関数名を省略できます。関数式は、定義するとすぐに実行する **IIFE** (即時実行関数)として使用できます。詳細については、{{jsxref("Functions", "関数", "", 1)}}の章を参照してください。 -

関数式の巻き上げ

+### 関数式の巻き上げ -

JavaScript の関数式は、{{jsxref("Statements/function", "関数宣言", "#Function_declaration_hoisting", 1)}}と違って巻き上げられません。定義前に関数式を使用することはできません。

+JavaScript の関数式は、{{jsxref("Statements/function", "関数宣言", "#Function_declaration_hoisting", 1)}}と違って巻き上げられません。定義前に関数式を使用することはできません。 -
console.log(notHoisted) // undefined
+```js
+console.log(notHoisted) // undefined
 // 変数名は巻き上げが行われますが、定義は行われません。そのため undefined になります。
 notHoisted(); // TypeError: notHoisted is not a function
 
 var notHoisted = function() {
    console.log('bar');
 };
-
+``` -

名前付き関数式

+### 名前付き関数式 -

関数内でその関数自身を参照する必要がある場合は、名前付き関数式を作成する必要があります。この名前は関数本体 (スコープ) に対してのみローカルです。これにより非標準の {{jsxref("Functions/arguments/callee", "arguments.callee")}} プロパティの使用も避けられます。

+関数内でその関数自身を参照する必要がある場合は、名前付き関数式を作成する必要があります。**この名前は関数本体 (スコープ) に対してローカルです**。これにより標準外の {{jsxref("Functions/arguments/callee", "arguments.callee")}} プロパティの使用も避けられます。 -
let math = {
+```js
+let math = {
   'factit': function factorial(n) {
     console.log(n)
-    if (n <= 1) {
+    if (n <= 1) {
       return 1;
     }
     return n * factorial(n - 1);
@@ -72,11 +73,12 @@ var notHoisted = function() {
 };
 
 math.factit(3) //3;2;1;
-
+``` -

関数式が代入された変数は name プロパティを持ちます。別の変数に代入しても name は変わりません。関数名が省略された場合、変数名になります (暗黙的gな名前)。関数名が存在したら、それが関数名になります (明示的な名前)。これは{{jsxref("Functions/Arrow_functions", "アロー関数", "", 1)}}にもあてはまります (アローは名前がないので変数名を暗黙的な名前として与える)。

+関数式が代入された変数は `name` プロパティを持ちます。別の変数に代入しても name は変わりません。関数名が省略された場合、(暗黙的な名前が) 変数名になります。関数名が存在したら、それが関数名になります (明示的な名前)。これは{{jsxref("Functions/Arrow_functions", "アロー関数", "", 1)}}にもあてはまります (アロー関数は名前がないので変数名を暗黙的な名前として与えます)。 -
var foo = function() {}
+```js
+var foo = function() {}
 foo.name // "foo"
 
 var foo2 = foo
@@ -88,56 +90,62 @@ bar.name // "baz"
 console.log(foo === foo2); // true
 console.log(typeof baz); // undefined
 console.log(bar === baz); // false (errors because baz == undefined)
-
+``` -

+## 例 -

無名関数の作成

+### 無名関数の作成 -

次の例では、無名関数を定義してそれを x に割り当てます。 関数は引数の 2 乗を返します。

+次の例では、無名関数を定義してそれを `x` に割り当てます。 関数は引数の 2 乗を返します。 -
var x = function(y) {
+```js
+var x = function(y) {
    return y * y;
 };
-
+``` -

関数をコールバックとして使用

+### 関数をコールバックとして使用 -

より一般的には{{Glossary("Callback_function", "コールバック")}}として使われます。

+{{Glossary("Callback_function", "コールバック")}}としてより頻繁に使われます。 -
button.addEventListener('click', function(event) {
+```js
+button.addEventListener('click', function(event) {
     console.log('button is clicked!')
-})
- -

仕様書

- - - - - - - - - - - - -
仕様書
{{SpecName('ESDraft', '#sec-function-definitions', 'Function definitions')}}
- -

ブラウザーの互換性

- -

{{Compat("javascript.operators.function")}}

- -

関連情報

- - +}) +``` + +### 即時実行関数式 (IIFE) の使用 + +無名の関数が生成され、呼び出されます。 + +```js +(function() { + console.log('Code runs!') +})(); + +// または + +!function() { + console.log('Code runs!') +}(); +``` + +## 仕様書 + +{{Specifications}} + +## ブラウザーの互換性 + +{{Compat}} + +## 関連情報 + +- {{jsxref("Functions/Arrow_functions", "アロー関数", "", 1)}} +- {{jsxref("Functions", "関数", "", 1)}} +- {{jsxref("Function")}} +- {{jsxref("Statements/function", "function")}} 文 +- {{jsxref("Statements/function*", "function*")}} 文 +- {{jsxref("Operators/function*", "function*")}} 式 +- {{jsxref("GeneratorFunction")}} +- {{jsxref("Statements/async_function", "非同期関数", "", 1)}} +- {{jsxref("Operators/async_function", "非同期関数式", "", 1)}} -- cgit v1.2.3-54-g00ecf