Loof 로 피보나치 구현하기// 배열 이용function loofFibo(n) { arr = [0, 1]; for (i = 2; i 재귀로 피보나치 구현하기function recurFibo(n) { if (n loof 구조에 비해 직관적이고 코드가 꽤나 짧다효율과 성능은 loof 구조가 더 좋지만 직관적이고 코드가 짧다는 장점이 실무에서 재귀를 많이 쓰는 이유가 된다고 한다. Memoized 를 이용하여 피보나치 구현하기//처음에 구현한 코드function memoized(fn) { const memoizedTable = {}; return function B(k) { return memoizedTable[k] ?? (memoizedTable[k] = fn(k)); };}const ..
클로저란?함수가 선언될 당시의 스코프(렉시컬 환경)을 기억해서 외부함수의 변수에 접근할 수 있는 함수를 말한다. 클로저의 핵심함수안에 함수가 있는 경우 대부분 클로저라고 한다. 외부함수가 종료된 경우에도 내부함수가 외부함수에 접근할 수 있다. 예제function makeCounter() { let count = 0; return function () { count += 1; return count; };}const counter = makeCounter(); //makeCounter 함수는 여기서 이미 종료됨console.log(counter()); // 1 console.log(counter()); // 2console.log(counter()); // 3// 대신 counter가 그 ..
스코프란?각 식별자들의 유효 범위이다. (Global Scope / Function Scope / Block Scope)cf. Module, eval('var x') Lexical scope (렉시컬 스코프)함수를 어디서 호출하는지가 아니라 어디에 선언하였는지에 따라 결정되는 것이다.즉, 함수를 어디서 정의하였는지에 따라 상위 스코프를 결정한다는 뜻이다."실행 시점"이 아니라, "선언 시점"에 스코프가 정해진다는 게 핵심. 다른 말로, 정적 스코프(Static scope)라 부르기도 한다. cf. Dynamic scope와의 비교렉시컬 스코프가 아닌 언어에서는 "어디서 호출되었는지" 기준으로 변수 스코프를 찾는다.그걸 동적 스코프라고 한다. (호출된 시간 기반) 자바스크립트는 오직 렉시컬 스코프만 지원한..
실행 컨텍스트란?코드가 실행될 때마다 생성되는 환경(상자)를 의미한다.이 상자안에는 코드가 실행될 때 필요한 모든 정보가 담겨있다. 예를 들어, 어떤 함수가 실행된다면 그 함수만의 실행 컨텍스트가 생성된다.이 컨텍스트들은 Call Stack(= Execution Context Stack) 에 쌓이며 실행된다. 실행 컨텍스트가 만들어지는 경우전역 코드가 실행될때 전역 실행 컨텍스트가 생성된다.함수가 호출 될 때마다 함수 실행 컨텍스트가 생성된다.eval 코드 실행 시 모듈 코드 실행 시 실행 컨텍스트의 구성✔️ 실행 컨텍스트의 핵심적인 구성요소 : Lexical Environment (렉시컬 환경)실행 컨텍스트가 참조하는 가장 중요한 데이터 구조내부 구조는 다음과 같다.EnvironmentRecord (E..
strict mode 란?ES5에서 소개된 strict 모드는 js 의 제한된 버전을 선택하여 암묵적인 "느슨한 모드(sloppy mode)"를 해제하기 위한 방법이다.strict 모드는 단지 부분적인 것이 아니며, 고의적으로 일반코드와 다른 시멘틱을 가지고 있다. "오해의 소지가 있는 구문을 문법적으로 명확하게 평가하겠다", "호이스팅은 동일하나, 블럭 내 함수는 블럭 스코프를 갖는다." 스크립트나 함수의 맨 처음에 “use strict” 적으면 strict mode를 사용할 수 있다. strict mode의 특징선언하지 않은 식별자는 접근(access)할 수 없다. -> Reference error암묵적 전역(var, implicit global)은 허용하지 않는다delete로, 선언된 변수/함수/매..
디스트럭처링 할당이란?디스트럭처링(Destructuring)은 구조화된 배열 또는 객체를 Destructuring(비구조화, 파괴)하여 개별적인 변수에 할당하는 것이다. 배열 또는 객체 리터럴에서 필요한 값만을 추출하여 변수에 할당하거나 반환할 때 유용하다. Object 디스트럭처링const obj = {b : 2, c: 3, d: 4};const [a,b,c] = obj;a; // undefinedb; // 2c; // 3d; // ReferenceError;객체를 해체할 때는 반드시 변수 이름과 객체의 프로퍼티 이름이 일치해야한다. 프로퍼티 이름이 유효한 식별자인 프로퍼티만 해체 후 할당된다.const obj = {b : 2, c: 3, d: 4};let a, b, c;{a,b,c} = obj;// ..