FrontEnd

    [JS] DeepDive(15) let,const 키워드와 블록 레벨 스코프

    ES5까지 변수를 선언할 수 있는 유일한 방법은 var 키워드를 사용하는 것이었다. var 키워드로 선언된 변수는 다음과 같은 특징이 있다. 이 var라는 놈은 아주 독특한 특징으로 주의를 기울이지 않으면 심각한 문제를 발생시킬 수 있다. var x = 1; var y = 1; var x = 100; //중복을 허락함 var y; //초기화문이 없으면 무시됨 console.log(x); //100 console.log(y); //1 위 예제는 var 키워드로 선언한 x변수와 y변수는 중복 선언되었지만 에러가 발생하지 않는다. 함수 레벨 스코프 var 키워드로 선언한 변수는 오직 함수의 코드 블록만을 지역 변수로 인정한다. 따라서 함수 외부에서 var키워드로 선언한 변수는 오직 코드 블록 내에서 선언하더라..

    [JS] DeepDive(14) 전역변수의 문제점

    전역 변수의 무분별한 사용은 위험한다. 그 이유를 알아보자. 변수는 자신이 선언된 위치에서 생성되고 소멸한다. 전역 변수의 생명 주기는 애플리케이션의 생명 주기와 같다. 하지만 함수 내에서 선언된 지역 변수는 함수의 호출과 종료에 따라 생명주기가 결정된다. 즉, 지역변수의 생명 주기는 함수의 생명 주기와 일치한다. 함수 내부에서 선언된 지역변수는 함수가 생성한 스코프에 등록되며 스코프는 렉시컬 환경이라 불리는 물리적인 실체가 있다고 했다. 따라서 변수는 자신이 등록된 스코프가 소멸될때가지 유효하게 된다. 단, 누군가가 스코프를 참조하고 있다면 그 스코프는 해제되지 않고 생존하게 된다. var x = 'global' function foo() { console.log(x) //? var x = 'local..

    [JS] DeepDive(13) 스코프

    스코프(유효범위)는 사실 자바스크립트 뿐 아니라 모든 프로그래밍 언어의 기본적이지만 중요한 개념이다. 특히 JS의 스코프는 다른 언어의 스코프와 구별되는 특징이 있어서 주의가 필요하다. 예를들어 var,let,const로 선언한 변수의 스코프가 다르다. 스코프의 간단한 예시를 보자. function add(x,y) { console.log(x,y); return x+y; } add(2,5); console.log(x,y); 함수의 매개변수를 보자. 함수의 매개변수는 함수 몸체 내부에서만 참조할 수 있고 함수 몸체 외부에서는 참조할 수 없다. 매개변수의 스코프가 함수 몸체 내부로 한정되기 때문이다. 모든 식별자는 자신이 선언된 위치에 의해 다른 코드가 식별자 자신을 참조할 수 있는 유효범위가 정해진다. 스..

    [JS] DeepDive(12) 함수

    함수는 자바스크립트에서 가장 중요한 핵심 개념 중 하나이다. 자바스크립트의 핵심 개념들인 스코프,실행컨텍스트,클로저,생성자 함수에 의한 객체 새성 ,메서드 this , 프로토타입,모듈화 등등 모두 함수와 직간접적으로 관련이 있기 때문에 자바스크립트를 정확히 이해하고 사용하기 위해서는 함수에 대한 이해가 필수이다. 사실 프로그래밍 언어의 함수의 기본개념은 수학과 크게 다르지 않다. function add(x,y) { return x + y; } add(2,5) 함수에 대한 문법은 크게 설명하고 넘어가지는 않을 것 같다! 함수는 필요할 때 여러번 호출할 수 있고 몇번이고 호출할 수 있으므로 코드의 재사용 측면에서 아주 유용하다. 함수를 사용하지 않고 같은 코드를 중복해서 사용하면 그 코드를 반복해서 적어야 ..

    [JS] 최댓값과 최솟값

    split함수를 활용해서 공백으로 만든 이후, Math의 내장함수 min과 max를 활용해서 최소,최대 값을 빼내주었다. `` 를 활용해서 문자열을 만들어 반환해서 해결하였다. function solution(s) { const ary = s.split(" ") return `${Math.min(...ary)} ${Math.max(...ary)}` }

    [JS] 최솟값 만들기

    두배열 중 하나는 오름차순, 하나는 내림차순으로 정렬한 이후 인덱스대로 서로 곱해서 더해주면 최소값이 나온다. 수학적으로 이유는 잘 모르겠지만 예시 케이스들에서 규칙을 보고 해보니 정답이 적용이 되었다. function solution(A,B){ A.sort((a,b) => a-b) B.sort((a,b) => b-a) let ret = 0 for (let i = 0 ; i < A.length ; i++) { ret += A[i] * B[i] } return ret }