【 JavaScript 】 クロージャ

クロージャとは?
ー 関数と関数が宣言されたレキシカル環境の組み合わせ ー 関数とその関数の定義時のコンテキストをセットにした特殊なオブジェクト
特徴
通常関数は完了時に内部変数が破棄される。
クロージャは関数の定義時のコンテキストをセットする為、
親関数が実行完了されリセットされてもクロージャー内には定義時の値が保持されている為、再利用できる

関数のコンテキスト


関数は宣言時のコンテキストで実行される

コンテキスト = 宣言された関数が参可能な外部変数(外側の関数のローカル変数とグローバル変数)

let test = "中間テスト";

function a() {
//グローバル変数のtestを参照
  console.log(test + "4"); => 結果 : 中間テスト4
}

function b() {
//ローカル変数でtestを定義
  let test = "期末テスト";
//ローカル変数のtestを参照
  console.log(test + "9"); => 結果 : 期末テスト9

//ローカル変数のtestを参照せず、宣言時のコンテキストを参照

  a(); => 結果 : 中間テスト4
}

a();
b();



クロージャの挙動

let createCounter = function () {
  let cnt = 0;
  return function () {
    cnt += 1;
    console.log(cnt);
  };
};

//この時点で独立したクロージャが生成
let counter = createCounter();
counter();
//cnt = 1となったクロージャを生成
counter();
//cnt = 2となったクロージャを生成
counter();

関数は定義時のコンテキストと異なるコンテキスト上に持ち出されるとクロージャになる
クロージャは宣言された時点で独立されたクロージャーが生成され、その中で参照されたローカル変数が生成される
その為、結果はインクリメントされた値になる


うーん、むずい...

【 JavaScript 】thisとは

thisむずいんじゃ!

thisとは?

コンストラクターによってインスタンス化されたインスタンス

和訳
初期化(コンストラクター)によって生成(インスタンス化)された複製(インスタンス)

Q.なんで複製するの?そのまま使えば良くない?

A.僕もそう思ってた
ただここで出てくるのがオブジェクト指向の考え方らしいよ
オブジェクト指向は対象を直接変更することを認めていない
理由はデータの競合を防ぐ為
※もう少しいい例え考え中

オブジェクト指向

オブジェクト指向についてさっぱりだったのでまとめてみた

オブジェクトとは?

プログラムで扱う対象すべて

オブジェクトの構造

オブジェクト = プロパティ + メソッド

プロパティ = オブジェクトの状態や特性を表すための情報
メソッド = オブジェクトを操作するための道具



ん〜いまいちパッとしない...




山田太郎(オブジェクト )

年齢23歳 : 男性(プロパティ)

プログラムを書く(メソッド)

おー、なんとなく理解はできた



※随時更新していきます...