TIL(Lexical Environment)


語彙環境


Javascriptを学ぶと語彙環境という単語が出てきます.
どういう意味か分かりませんが、勉強しているうちに少しは理解できるようです…
脳が情報を離れる前に、少し整理しなければなりません.
変数の有効範囲は関数単位で決定されます.関数f()では、f()のディレクトリ環境が作成されます.
このプロセスで、関数の内部にもう1つの関数が定義されている場合、結果はf()Lexical環境で、もう1つの関数が定義されます.
内部関数集合環境が生成されます...例を見てみましょう.
let i = 5;
function a() {
  let i = 2;
  b();
};
function b() {
	console.log(i);
};
a() // 결과는 5가 된다. 함수 b를 호출하는 시점이 아닌 함수b를 생성하는 시점의 환경
let i = 5;
function a() {
  let i = 7;
  function b() {
    console.log(i)
  }
  b();
}
a(); // 결과는 7이 된다. a함수 안에서 b가 생성되었고 b 함수가 정의된 상황적 환경 변수를 가리킨다.
let i = 5;
function a() {
  console.log(i)
  let i = 'ajrfyd'
  console.log(i)
};
a(); // undefined  a 함수 첫번째 log에는 5가 찍힐것 같지만 undefined가 찍힌다.
     // 'ajrfyd' 두번째 log에는 비로소 'ajrfyd'값이 찍힌다.
     // javascript는 위에서 아래로 코드를 읽는다. 첫번째의 log는 i를 찾아 
     // 전역으로 나갈 것 같지만 함수 a가 생성되던 상황적 환경에 보면 i가 정의 되어 있다.
     // 위의 로그보다 위에 있지만, 함수가 생성될때 어휘적 환경에는 존재하긴 한다는 것이다...
     // 있긴 있으나 정의되기 전이니 undefined가 찍히게 된다. 
一般的なオブジェクト向け言語では、1つのオブジェクトに属する関数がそのオブジェクトの所有者になります.ただし、JavaScriptでは、関数は独立したオブジェクトとして存在し、applyまたはcallメソッドで他のオブジェクトの所有者のように実行できます.
オブジェクト向けプログラミング(Object-oriented Programming)は、論理をステータスと動作からなるオブジェクトに変えるより良いプログラムを作成するためのプログラミングモードです.これらのオブジェクトをレゴブロックのように組み立てるプログラムは,オブジェクト向けのプログラミングといえる.すなわち,オブジェクト向けプログラミングはオブジェクトの作成である.オブジェクトは変数とメソッドの組合せです.
抽象化
関数のthisは、その関数が属するオブジェクトを指します.
callback
関数をパラメータとして渡すことで,方法の動作方式を変えることができる.