初心者向け JavaScript 関数の使い方と実践例 - Javascript

関数

プログラミングの関数は、与えられた値をもとに、あらかじめ定められた処理を実行し、その結果を返します。

関数を定義する方法は、function キーワード、関数リテラル、Function コンストラクタで定義します。関数の入力を引数、関数の出力を戻り値といいます。

リテラル : literal

文字通りの,字義通りの

constructor : コンストラクタ

建設者、構築子

リテラルとは

リテラルとはソースコード内に値となる、文字列、数字、式を直接記述した定数のことです。

let str = "Hello, World";
let num = 10;

上記の場合、「 Hello World 」や 「 10 」のことをリテラルといいます。

コンストラクタとは

クラスのインスタンス生成時に実行される処理のことです。

コンストラクタ名はクラス名と同じ名前となり、戻り値のないメソッドです。

関数宣言で定義

関数宣言で関数を定義するには、function キーワードを使います。

function hello(lang){
    str = "Hello, " + lang;
    return str;
};

console.log(hello("JavaScript"));

関数リテラルで定義

関数リテラルを使って定義した関数は、変数に代入したり関数を呼びだす時の引数として指定することができます。また、定義された関数は、名前がないため「 無名関数 」または「 匿名関数 」ともいいます。

let hello = function(lang){
    str = "Hello, " + lang;
    return str;
};

console.log(hello("JavaScript"));

関数リテラルによる関数定義は巻き上げられないため、関数を利用するよりも前に関数を定義する必要があります。

hello();
    
const hello = function(){
    console.log("Hello, World");
};

// 結果
ReferenceError: Cannot access 'hello' before initialization

Function コンストラクタで定義

Function コンストラクタを使って、関数を作成する場合は、引数や関数内のプログラムを文字列として定義できます。

Function コンストラクタは、プログラムを文字列として定義できる為、プログラムの内容にってはセキュリティホールが発生します。

そのため、関数定義は関数宣言や関数リテラルを使って作成し、Function コンストラクタはあまり使用しません。

let hello = new Function('lang', 'return "Hello, " + lang;');
console.log(hello("Javascript"));

アロー関数

アロー関数は、無名関数の省略記法で関数リテラルとは次の4つの内容が異なります。

  • this の値が関数定義時に設定される
  • arguments 変数をもたない
  • コンストラクタとしては利用できない
  • yield キーワードは使えない
const hello = () => {
    console.log("Hello, World");
};

hello();

即時関数

即時関数は、関数定義と同時に関数を実行する記法です。

(function() {
    console.log("Hello, World");
})();

(function (js, py){
    console.log(js);
    console.log(py);
})("Javascript", "Python");

アロー関数を使った即時関数

(() => {
    console.log("Hello, World");
})();

((js, py) => {
    console.log(js);
    console.log(py);
})("Javascript", "Python");

即時関数の中で定義した変数は、関数の外からは参照できません。

(() => {
    const lang = "Javascript";
    console.log("Hello, World");
})();

console.log(lang); 
// 結果 ReferenceError: lang is not defined

関数に複数の戻り値を設定する

分割代入を使って変数に代入します。

function num(){
    return [1, 2, 3];
}

let [a, b, c] = num();

console.log(a);
console.log(b);
console.log(c);

引数にオブジェクトを渡す

function hello(data){
    console.log(data["msg"])
}

const obj = { msg: "hello, world" }

hello(obj);