今回は、関数について解説していきます。
関数の使い方
script.jsを以下のように書き換えてください。
function myFunction() {
const msg = 'Hello, world!';
console.log(msg);
}
この時点では、コンソールには何も表示されません。
次に、myFunction();
を追加します。
function myFunction() {
const msg = 'Hello, world!';
console.log(msg);
}
myFunction();
コンソールを確認すると、「Hello, world!」と表示されます。
関数は、function 関数名(){}
の形で宣言してます。波括弧内に、処理の内容を記述します。
宣言した関数は、関数名()
で実行されます。
上記コードでは、myFunction();
で宣言した関数を実行しています。
関数は、以下のような書き方もできます。
const myFunction = () => {
const msg = 'Hello, world!';
console.log(msg);
}
myFunction();
こちらはアロー関数という書き方です。
アロー関数は、2015年に策定されたES2015(ES6)から使えるようになりました。
古いコードはfunctionで書かれていますが、新しいコードでは簡潔なアロー関数が使われることが多いです。
functionを使った関数とアロー関数には仕様が異なる点があります。
script.jsを以下のように書き換えてください。
myFunction();
function myFunction() {
const msg = 'Hello, world!';
console.log(msg);
}
functionを使った場合、宣言の前に実行しても問題なく動作します。
以下のコードはエラーになります。
myFunction();
const myFunction = () => {
const msg = 'Hello, world!';
console.log(msg);
}
アロー関数はconstで定義するので、constの仕様上定義前に実行することはできません。
JavaScriptには、thisというものがあるのですが、アロー関数はthisの扱いも異なります。
thisの説明は長くなるので、ここでは省きますが、アロー関数の場合thisに入る値が異なるということは頭に入れておいてください。
このレクチャーでは、現在一般的に使われているアロー関数で解説していきます。
引数
関数には引数を入れることができます。
script.jsを以下のように書き換えてください。
const x = 10;
const myFunction = (num) => {
const result = num + 5;
console.log(result);
}
myFunction(x);
コンソールを確認すると、15が表示されます。
括弧()内に引数numを入れて、numに5を足す処理をしています。
myFunction(x);
つまりmyFunction(10);
を実行すると、numには10が入り計算結果は15になります。
アロー関数では、引数が1つの場合、括弧()を省略することもできます。
const x = 10;
const myFunction = num => {
const result = num + 5;
console.log(result);
}
myFunction(x);
引数はコンマで区切って複数入れることもできます。
const x = 5;
const y = 4;
const myFunction = (num1, num2) => {
const result = num1 + num2;
console.log(result);
}
myFunction(x, y);
最初の引数(第一引数)には5、次の引数(第二引数)には4が入り二つを足して9が出力されます。
functionで定義する場合は、以下のように書きます。
const x = 5;
const y = 4;
function myFunction(num1, num2) {
const result = num1 + num2;
console.log(result);
}
myFunction(x, y);
戻り値
関数で処理した結果を、戻り値として取得することができます。
script.jsを以下のように書き換えてください。
const x = 6;
const y = 8;
const myFunction = (num1, num2) => {
const result = num1 + num2;
return result;
}
const sum = myFunction(x, y);
console.log(sum);
コンソールを確認すると、14と表示されます。
returnの行にある値は、関数の処理結果として受け取ることができ、ここではsum
に代入しています。
即時関数
関数は呼び出した時に処理を行いますが、呼び出しを行わずに実行させることもできます。
const x = 6;
const y = 8;
const myFunction = (num1, num2) => {
const result = num1 + num2;
return result;
} // 定義された時点では実行されない
const sum = myFunction(x, y); // ここで実行される
上のコードでは、定義された段階では実行されていませんが、myFunction(x, y);
で関数を呼び出した時点で処理が実行されています。
(() => {
console.log('すぐに実行されます。')
})();
コンソールを確認すると、このコードが実行されているのが分かります。
このように、呼び出しを行わず実行される関数を、即時関数と言います。
functionを使う場合は、以下のように書きます。
(function() {
console.log('すぐに実行されます。');
}());
無名関数
即時関数で書いた関数には、関数名がありません。
関数名のない関数を、無名関数と言います。
以前のレクチャーで紹介したコードは、無名関数を使っています。
const array = ['バナナ', 'りんご', 'みかん'];
array.forEach((item) => {
console.log(item);
});
以下のコードが無名関数の部分です。
(item) => {
console.log(item);
}
forEachメソッドの引数には、実行する関数が入ります。
array.forEach(実行する関数);
つまりforEachメソッドは、配列の数だけ関数を実行し、その関数の引数(item)には配列の中身が入るということです。
functionで書いた場合は、以下のような書き方になります。
const array = ['バナナ', 'りんご', 'みかん'];
array.forEach(function(item) {
console.log(item);
});