LitererType 리터럴 타입 const userName1 = 'bob'; // 문자열 리터럴 타입 let userName2 = 'tom'; const는 불변값이며 let은 스트링 타입으로 고정되어있기에 다른 타입의 값을 배정하면 안된다 다른 타입도 넣을려면 let userName3: string | number = 'Tom'; userName3 = 3; 타입으로도 만들 수 있다. type Job = 'police' | 'developer' | 'teacher'; 숫자형 리터럴 타입도 이용할 수 있다. type Grade = 1 | 2 | 3; interface User { name: string; job: Job; grade: Grade; } const user: User = { name: "bob..
취준생
문제 설명 네오와 프로도가 숫자놀이를 하고 있습니다. 네오가 프로도에게 숫자를 건넬 때 일부 자릿수를 영단어로 바꾼 카드를 건네주면 프로도는 원래 숫자를 찾는 게임입니다. 다음은 숫자의 일부 자릿수를 영단어로 바꾸는 예시입니다. 1478 → "one4seveneight" 234567 → "23four5six7" 10203 → "1zerotwozero3" 이렇게 숫자의 일부 자릿수가 영단어로 바뀌어졌거나, 혹은 바뀌지 않고 그대로인 문자열 s가 매개변수로 주어집니다. s가 의미하는 원래 숫자를 return 하도록 solution 함수를 완성해주세요. 참고로 각 숫자에 대응되는 영단어는 다음 표와 같습니다. 숫자영단어 0 zero 1 one 2 two 3 three 4 four 5 five 6 six 7 s..
문제 설명 단어 s의 가운데 글자를 반환하는 함수, solution을 만들어 보세요. 단어의 길이가 짝수라면 가운데 두글자를 반환하면 됩니다. 제한 사항 s는 길이가 1 이상, 100이하인 스트링입니다. 문제 풀이 방법 주어진 문자열 s의 길이에서 절반을 나타내는 수를 선언한다. 홀수 길이라면 floor를 통해 내림수를 선언해준다. 홀수 짝수를 나누어 s.slice를 통해 해당 문자를 반환해준다. 내가 작성한 코드 const solution = (s) => { const half = Math.floor(s.length / 2); return (s.length % 2) === 0 ? s.slice(half - 1, half + 1) : s.slice(half, half + 1); }
호이스팅 정의 : 변수와 함수 선언문을 선언된 위치에서 코드의 꼭대기로 올리는 동작 호이스팅을 동작을 한번 코드를 보며 확인해보자. a = 2; var a; console.log(a); 위의 코드에서 var a 라는 변수 선언문이 있다. JS엔진은 코드를 인터프리팅 하기 전에 컴파일한다.(중요) 컴파일레이션 단계 중 모든 선언문을 찾아 적절한 스코프에 연결해주는 것이 렉시털 스코프의 핵심이다. 고로 위의 코드에서는 아래와 같은 구문으로 나누어진다. var a; a = 2; 첫번째 구문은 선언문으로 컴파일레이션 단계에서 처리되며, 두번째 구문은 대입문으로 실행 단계 까지 방치된다. 고로 코드는 다음과 같이 처리된다. var a; a = 2; console.log(a); 선언문만 끌어올리고 다른 대입문이나 ..
4. 스코프 역활을 하는 블록 JS에서 함수가 가장 보편적이고 널리 퍼진 디자인 접근법 이지만, 다른 스코프 단위도 존재하며 이를 이용하면 더 깔끔한 코드를 작성할 수 있다. 예를 들어 블록 스코프를 보자. JS는 지원하지 않지만 아래의 코드같은 모습은 많이 봤다. for(let i = 0; i < 10; i++){ ... } 변수 i를 for 반복문의 시작부에 선언하는 이유는 i를 오직 for 반복문과 관련해서 사용하려하기 때문이다. 블록 스코프의 목적은 변수를 최대한 사용처 가까이에서 최대한 작은 유효 범위를 갖도록 선언하는 것이다. 위의 코드에서는 그 목적을 제대로 반영하는 것 같다. 4.1. with with은 사용하게 되면 동작 속도가 저하되지만, 블록 스코프의 형태를 보여주는 한 예로 with..
1. 함수 기반 스코프 각각의 선언된 함수는 각자의 버블을 생성하지만 다른 자료 구조도 자체적인 스코프를 생성하지 않나는 것은 사실이 아니다. 함수 스코프는 모든 변수가 함수에 속하고 함수 전체(중첩 스코프 포함)에 걸쳐 사용, 재사용된다. 2. 일반 스코프에 숨기 스코프를 통해 숨는 이유는 여러가지 있지만, 소프트웨어 디자인 원칙인 '최소 권한의 원칙'*('최소 권위', '최소 노출' 으로도 불림)과 관련있다. * : 모듈 / 객체의 API와 같은 소프트웨어를 설계할 때 필요한 것만 최소한으로 남기고 나머지는 숨겨야 한다는 것 모든 변수, 함수가 글로벌 스코프에 존재하면 최소 권위에 반하는 규칙이다. const func1 = (a) => { const func2 = (a) => { return a - ..