|
| 1 | +--- |
| 2 | +title: 関数とオブジェクト |
| 3 | +--- |
| 4 | + |
| 5 | +JavaScriptにおいては、関数も一種のオブジェクトです。関数自体を数値や文字列と同じく通常の値として扱うことができます。 |
| 6 | + |
| 7 | +:::tip |
| 8 | +関数のこのような性質を**第一級関数**と呼びます。 |
| 9 | +::: |
| 10 | + |
| 11 | +## 関数を変数に代入する |
| 12 | + |
| 13 | +```js |
| 14 | +function doSomething() { |
| 15 | + document.write('Hello World!'); |
| 16 | +} |
| 17 | + |
| 18 | +const someVariable = doSomething; |
| 19 | +someVariable(); |
| 20 | +``` |
| 21 | + |
| 22 | +上の例では、関数`doSomething`を`someVariable`に代入しています。関数が入った変数は、そのまま通常の関数と同様に使用できます。 |
| 23 | + |
| 24 | +## 関数を関数の引数として使用する |
| 25 | + |
| 26 | +```js |
| 27 | +function callTwice(callback) { |
| 28 | + callback(); |
| 29 | + callback(); |
| 30 | +} |
| 31 | + |
| 32 | +function sayHello() { |
| 33 | + document.write('Hello'); |
| 34 | +} |
| 35 | + |
| 36 | +callTwice(sayHello); |
| 37 | +``` |
| 38 | + |
| 39 | +`callTwice`の内部の`callback`には関数が格納されているので、そのまま実行することができます。 |
| 40 | + |
| 41 | +## 無名関数 |
| 42 | + |
| 43 | +**無名関数**とは、名前を持たない関数のことです。**アロー関数式**は、JavaScriptにおいて無名関数を生成する式の一種です。 |
| 44 | + |
| 45 | +先ほどの例を、無名関数を用いて書き換えてみましょう。 |
| 46 | + |
| 47 | +```js |
| 48 | +callTwice(() => { |
| 49 | + document.write('Hello'); |
| 50 | +}); |
| 51 | +``` |
| 52 | + |
| 53 | +アロー関数式は、`(引数) => { 処理 }`の形をとります。上記の例では、`() => { document.write('Hello'); }`の部分が、引数を取らず、`Hello`と表示する無名関数を生成する式となっています。 |
| 54 | + |
| 55 | +## アロー関数式の省略形 |
| 56 | + |
| 57 | +アロー関数式には、2つの省略記法が存在しています。両方を組み合わせることも可能です。 |
| 58 | + |
| 59 | +### 引数の括弧の省略 |
| 60 | + |
| 61 | +アロー関数の引数が1個だけのとき、引数の括弧は省略できます。 |
| 62 | + |
| 63 | +```js |
| 64 | +(x) => { return x * 2; } |
| 65 | +``` |
| 66 | + |
| 67 | +は、 |
| 68 | + |
| 69 | +```js |
| 70 | +x => { return x * 2; } |
| 71 | +``` |
| 72 | + |
| 73 | +のように省略できます。 |
| 74 | + |
| 75 | +### `return`文とブロックの括弧の省略 |
| 76 | + |
| 77 | +アロー関数式内が`return`文ただひとつのとき、`return`文と波括弧が省略できます。 |
| 78 | + |
| 79 | +```js |
| 80 | +(x) => { return x * 2; } |
| 81 | +``` |
| 82 | + |
| 83 | +は、 |
| 84 | + |
| 85 | +```js |
| 86 | +(x) => x * 2; |
| 87 | +``` |
| 88 | + |
| 89 | +のように省略できます。 |
| 90 | + |
| 91 | +## 課題 |
| 92 | + |
| 93 | +```js |
| 94 | +function map1To10(callback) { |
| 95 | + const numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; |
| 96 | + for (let i = 0; i < numbers.length; i++) { |
| 97 | + numbers[i] = callback(numbers[i]); |
| 98 | + } |
| 99 | + return numbers; |
| 100 | +} |
| 101 | +``` |
| 102 | + |
| 103 | +`map1To10`を適切に呼び出して、以下の戻り値を得てください。 |
| 104 | + |
| 105 | +```js |
| 106 | +[3, 6, 9, 12, 15, 18, 21, 24, 27, 30] |
| 107 | +``` |
0 commit comments