서론

간단하게.. 스코프체인에 대해 정확하게 모르는 것 같아 정리하였다. 밑의 내용은 스코프체인에 대한 개념 및 예제를 정리하였다.

 

스코프체인이란?

스코프 체인(Scope Chain)은 JavaScript에서 어떤 변수나 함수를 찾을 때, 어디를 어떻게 찾아야 하는지 알려주는 연결 고리를 말한다. 길이 서로 연결되어 사슬처럼 이어진 것이 바로 스코프 체인라고 한다. 바로 예제로 넘어가서 이해해 보자.

 

예제

밑과 같은 코드가 있다고 가정하자. console.log를 활용하여 a변수를 출력한다면 어떻게 나올까?

const a = 3;
{
  const a = 2;
  {
    const a = 1;
    console.log(a);
  }
}

 

답은 1이다. 스코프체인은 가장 먼저, 변수를 사용하고 있는 현재 코드 블록(함수)의 렉시컬 환경에 있는 변수부터 찾는다. 여기에 찾는 변수가 있는지 확인을 한다. 

만약 맨 마지막에 스코프에 있는 const a = 1을 지우면 어떻게 될까?

const a = 3;
{
  const a = 2;
  {
    // const a = 1;
    console.log(a);
  }
}

 

console.log를 활용하여 a를 출력하면 2가 나온다. 왜냐하면 현재 스코프에서 변수를 찾지 못했다면, 해당 스코프의 '외부 렉시컬 환경 참조'가 가리키는 바로 한 단계 상위 스코프의 렉시컬 환경으로 이동하기 때문이다.

만약 2번째 스코프의 a를 주석처리하면 다음은 3이 나오게 된다. 이런 식으로 스코프가 많다면 이러한 과정을 반복한다. 찾는 변수가 나올 때까지 스코프 체인을 따라 계속해서 상위 스코프로 올라 것을 말한다.

 

 

결론

스코프체인은 클로저(Closure)는 덕분에 가능한 결과이다. 함수가 자신이 선언될 때의 렉시컬 환경을 기억하고, 그 렉시컬 환경과 연결된 스코프 체인에 있는 변수들을 계속 참조할 수 있기 때문이다. 외부 함수가 이미 실행을 마쳐도, 내부 함수가 그 외부 함수의 스코프 체인에 접근할 수 있게 된다.

https://school.programmers.co.kr/learn/courses/30/lessons/12951

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

function solution(s) {
  const result = s
    .split(" ")
    .map((item) => item.charAt(0).toUpperCase() + item.slice(1).toLowerCase());
  return result.join(" ");
}

 

문제 풀이 방법

 

1. 각 문자열을 공백 단위로 나눈다.

2. 나누게 되면 배열이 만들어지는데, 배열 안의 문자열중에 첫문자를 모두 대문자로 바꾸고, 나머지는 소문자로 바꾼다.

3. 그리고 공백 단위로 나눈 문자열을 join 함수를 사용해서 합쳐준다.

 

 

 

const filePath = process.platform === "linux" ? "/dev/stdin" : "ex.txt";
const [N, ...ropes] = require("fs")
  .readFileSync(filePath)
  .toString()
  .trim()
  .split("\n")
  .map((item) => parseInt(item));

ropes.sort((a, b) => a - b);
let maxWeights = [];
for (let i = N; i >= 1; --i) {
  maxWeights.push(i * ropes[N - i]);
}

maxWeights.sort((a, b) => b - a);
console.log(maxWeights[0]);

에러 로그

nvm: install v14.17.0 failed!
pyenv: python3.8: command not found

 

원인

mac m1 사용은 15 버전 밑으로 설치를 하면 다음과 같이 파이썬 에러가 발생

 

해결

nvm install 16 버전대를 설치하니 잘되었음
다른 방법이 있겠지만.. 15 버전 이후를 사용하자

 

16 버전대를 설치해 보니 잘됨

 

웹팩이란?

웹팩은 프로젝트에 사용된 파일을 분석하여 기존 웹 문서 파일로 변환하는 도구를 말함

 

웹팩의 필요성

리액트와 같은 프레임워크에선 .js, .css, .jpg와 같은 확장자를 기존 웹 문서 파일을 사용하지 않기 때문에,
webpack이 이것을 변환 시켜준다. 예를 들면, 부트스트랩과 같은 파일은. css가 아니라 sass로 되어있는데,
웹 브라우저는 .sass와같은 확장자를 인식하지 못하므로, 이것을 중간에서 해석해주는 것이 webpack이다.

1. 익명 함수란?

익명 함수는 이름이 없는 함수를 말한다.

함수 자체가 식이기 때문에, 변수에 할당할 수 있다.

 

익명함수는 다음과 같은 예제로 사용 할 수있다.

let add = function(a, b) {
    return a+b;
}

let sum = add(10, 20);

console.log(sum) // 30

2. 그렇다면 화살표 표기법은 무엇인가?

화살표 표기법은 위의 익명함수를 좀 더 간단하게 만들어서 사용할 수 있다.

let add = (a, b) => a + b;

let sum = add(10, 20);

console.log(sum); // 30

화살표 함수는 위처럼 사용하는데, 여러 조건이 있다.

  • 매개 변수가 하나일 경우에는 매개변수 괄호를 생략 가능
  • 매개 변수가 없을 경우는 매개변수 괄호가 무조건 있어야 함
  • 본문의 줄이 한줄일 경우에는 몸통 {}생략이 가능하며, return문도 생략이 가능함
  • return할 값이 만약 객체이면 소괄호가 있어야하며, 몸통은 ({})형태를 가짐
  • 기본적으로 화살표 함수는 (매개변수) => {본문}의 형태

1) 정의

  • element를 css 방식으로 검색할수 있는 방법

2) 사용 방법

  • id는 #, class는 . 으로 구분하여 element를 가져온다.

3) 예제 코드

<HTML Code>

<h1 class="myclass1">Hello</h1>
<h1 id="myclass2">Hello</h1>

<JS Code>

const el1 = document.querySelector(".myclass1");
const el2 = document.querySelector("#myclass2");

참조 : https://developer.mozilla.org/ko/docs/Web/API/Document/querySelector

+ Recent posts