クロージャ(closure)についての解説の続き。
前回の記事
【JavaScript】クロージャ(closure) (attacktube.com)
クロージャの挙動について理解を深めていく。
【JavaScript】クロージャ(closure)
クロージャ(closure)について解説する。
クロージャを簡単に説明すると「関数オブジェクトの1つ」である。
ただし、クロージャは単純な関数オブジェクトではなく、「環境付き」の関数オブジェクトである。
JavaScriptの関数は、その関数が作成されたときの「環境」を保持するように設計されている。
クロージャは関数の中に関数を定義する。このとき、内側の関数が外側の関数で定義した変数やパラメータ(thisとargumetsを除く)にアクセス可能である。
この内側の関数は、外側の関数で定義した変数やパラメータ(thisとargumetsを除く)にアクセスできる環境付きの関数オブジェクト(クロージャ)である。
つまり、関数を定義して、その関数の中に関数を定義してあったらクロージャである。
次にクロージャのサンプルコードを示す。
closureTest関数の中にret関数を定義してある。
外側の関数はclosureTest関数であり、内側の関数はret関数である。
closureTestを呼び出してcounter関数を生成する。
counter関数を実行するたびに10づつ値が増えていく。
新しくclosureTestを呼び出すと、そこで生成された関数は全く別の環境を保持することになる。
counter関数の環境とcounter2関数は異なる環境である。
【JavaScript】カリー化と部分適用
JavaScriptのカリー化と部分適用の違いがよく分かっていない。
人によって認識違ったり、書籍やWebサイトの情報も書いてあることがそれそれ違っていたりする。
クロージャの代表的な使い方として「部分適用」というテクニックがある。
「部分適用」は引数の数を減らすテクニックである。
今まで「カリー化」と「部分適用」は使ったことないな。
伊是名夏子×ガパオライス×ヘルパーズ×中野淳
複数のヘルパーが同じ時間に伊是名夏子の自宅に来ている、ヘルパーも一緒に食事している。
違反だらけ好き嫌い.com伊是名夏子スレで有名なガパオライスの動画。

中野伊是名家専従ヘルパー業務違反
好き嫌い.comの伊是名夏子スレに貼ってあった「中野伊是名家専従ヘルパー業務違反」
■中野伊是名家専従ヘルパー業務違反
(重度障害者養成研修課程修了済)
【JavaScript】mapメソッドで注意すること
空の配列にmapメソッドを使用してもエラーにならずに、空の配列がmapメソッドで生成される挙動になる。
続きを読む【JavaScript】forEachで注意すること
forEachは配列の値がundefinedになっていたら、スルーされる挙動をするみたいだな。
それから、空の配列に対してforEachを使用してもエラーにはならない。
const array1 = [];
array1[1] = 90;
array1[5] = 190;
console.log("array1");
for (let i = 0; i < array1.length; i += 1) {
console.log("array1[" + i + "] = " + array1[i]);
}
console.log("---------");
array1.forEach((element, i) => {
console.log("array1[" + i + "] = " + element);
});
const array2 = [];
array2.forEach((element, i) => {
console.log("array2[" + i + "] = " + element);
});
/*
array1
array1[0] = undefined
array1[1] = 90
array1[2] = undefined
array1[3] = undefined
array1[4] = undefined
array1[5] = 190
---------
array1[1] = 90
array1[5] = 190
*/
続きを読む
【JavaScript】Math.maxとMath.minとfilterメソッド
配列の中の最大値と最小値をMath.maxとMath.minで求めようとしたところ、配列の値にundefinedが含まれているとNaNが返ってくることに注意する。
このため、filter(Boolean)あるいはfilter(value => value)を使ってfalsyな値(false とみなされる値)を全て削除した後にMath.maxとMath.minを使うこと。
falsyな値は次の通りである。
null
undefided
空文字
数値の0
NaN
空の配列に対してMath.maxを使うと-Infinityが返ることに注意する。
空の配列に対してMath.minを使うとInfinityが返ることに注意する。
【JavaScript】for文をfindメソッドで書き換える
for文で書くと長くなるコードをfindメソッドを使うと簡潔に書ける。
const array1 = [5, 12, 8, 130, 44, 1000];
let result = "";
for (let i = 0; i < array1.length; i++) {
if (array1[i] > 10) {
result = array1[i];
break;
}
}
console.log("result = " + result);
const result2 = array1.find(element => element > 10);
console.log("result2 = " + result2);
/*
result = 12
result2 = 12
*/
続きを読む
【JavaScript】forEachメソッドをfilterメソッドで書き換える
forEachメソッドで書くと長くなるコードをfilterメソッドを使うと簡潔に書ける。
const words = ['spray', 'limit', 'elite', 'exuberant', 'destruction', 'present'];
const result = [];
words.forEach((element, i2) => {
if (element.length > 6) {
result.push(element);
}
});
console.log("result = " + result);
const result2 = words.filter(word => word.length > 6);
console.log("result2 = " + result2);
/*
result = exuberant,destruction,present
result2 = exuberant,destruction,present
*/
続きを読む
最近のコメント