計算機科学の理屈上では、関数(引数、戻り値)さえあれば、あらゆる計算が可能です。変数なんていらないんです。 function F (x) { // 変更される値は引数で与えられる const a = 1; // 分かりやすさのために定数は可、ただし再代入はできない return x + a; } F(1); // 2 上の F は、与えられた数字に必ず 1 を足して返す関数ですね。関数 F は、引数 x に対して、必ず 1 つの結果を返します。プログラムの結果が予測しやすくなると同時に、エラーの原因も瞬時に分かるようになります。こういうのを参照透過性と言ったりします。 でも、上の定数 a を変更したい場合もあるでしょう。そんなときは関数 F を作る関数 G を作れば良い。 function G (a) { return function F (x) { return x + a; } }