TIL(Lexical Environment)

어휘적 환경

자바스크립트를 공부하다가 보면 어휘적 환경(lexical environment) 라는 단어가 나온다.
도통 무슨 말인지 몰랐으나, 공부를 하다가 보니 조금은 이해가 갈 것 같기도 하고....
두뇌에서 정보가 떠나기 전 살짝 정리좀 해 봐야겠다.

변수의 유효범위는 함수단위로 정해진다. 함수 f()에서는 f()의 렉시컬환경이 생성이 된다.
그과정에서 함수 내부에서 함수를 또 정의한다면 결과적으로 f()렉시컬환경 안에서 또다른
내부함수 렉시컬 환경이 생기게된다.... 예를 한번 보자.

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가 찍히게 된다. 

일반적인 객체지향 언어에서는 하나의 객체에 소속된 함수는 그 객체의 소유물이 된다. 하지만 JavaScript에서 함수는 독립적인 객체로서 존재하고, apply나 call 메소드를 통해서 다른 객체의 소유물인 것처럼 실행할 수 있다
객체지향 프로그래밍(Object-Oriented Programming)은 좀 더 나은 프로그램을 만들기 위한 프로그래밍 패러다임으로 로직을 상태(state)와 행위(behave)로 이루어진 객체로 만드는 것이다. 이 객체들을 마치 레고 블럭처럼 조립해서 하나의 프로그램을 만드는 것이 객체지향 프로그래밍이라고 할 수 있다. 다시 말해서 객체지향 프로그래밍은 객체를 만드는 것이다. 객체는 변수와 메소드를 그룹핑한 것이다.
추상화
함수 안에서의 this는 그 함수가 소속되어 있는 객체를 가리킨다.
callback
함수를 매개변수로 전달하는 것을 통해서 메소드가 동작하는 방법을 바꿀 수 있다.

좋은 웹페이지 즐겨찾기