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
함수를 매개변수로 전달하는 것을 통해서 메소드가 동작하는 방법을 바꿀 수 있다.
Author And Source
이 문제에 관하여(TIL(Lexical Environment)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@ajrfyd/lexical저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)