Skip to content

0707

ㅋㅋㅋㅋ아 겁나 망했다 ㅠㅠㅠㅠㅠ
여기에 문제 유형을 적을 순 없고..
6개월간 코테를 발로 풀었나보다

더 수련하자 ...... ㅎㅇㅌ ^^

js 기초

duplicate() 함수 구현

js
function duplicate(x, n) {  
  let result = [];  
  for (let i = 0; i < n; i++) {  
    result.push([...x]);  
  }  
  return result;  
}

console.log(JSON.stringify(duplicate([1, 2, 3, 4, 5], 3)));

sum(1)(2); // 3 함수 구현

js
const sum = function (a) {  
  return function (b) {  
    return Number(a) + Number(b);  
  };  
};

console.log(sum(1)(2));
  • 클로저란, 함수의 리턴값을 함수로 주는 형태.
    • 왜 필요한가?
      1. 자바스크립트에는 private이 없기 때문에 클로저로 이를 흉내낼 수 있다.
      2. 함수 실행이 끝나도 외부 함수의 변수를 내부함수가 계속 기억하기에 상태를 유지할 수 있다.
        • 리액트의 useState 원리도 여기서 출발함.
      3. 외부에서 a를 고정 시켜 새로운 함수를 만들어내는, 마치 함수 공장처럼 사용할 수 있다.

createBase

js
const createBase = function (x) {  
  return function addSix(r) {  
    return Number(x) + Number(r);  
  };  
};

const addSix = createBase(6);  
console.log(addSix(10));
  • 함수 내부에서 선언한 function 이름은 함수 내부에서만 사용된다.
    • 왜? 스코프가 있으니까.
    • 왜 이렇게 만든걸까?
      • 불필요한 변수가 외부에 노출되면 복잡성이 증가한다.
      • 이런 경우가 언제 있을까?
        • 퀴즈를 푸는 사이트가 있다고 가정하자.
        • 이 때 답이 맞았는지, 틀렸는지 검증하는 함수를 전역에 선언한다면
          사용자가 브라우저 콘솔창에 해당 함수에 어떤 값을 넣고 출력했을 때
          이가 정답인지, 아닌지를 미리 알 수 있어 악용할 가능성이 생긴다.
      • 이렇게 내부 스코프가 필요한 이유는 private 선언이 필요한 이유와도 귀결되며 이는 최종적으로 클로저의 필요성과 연결된다.

async/await

1번 출력 후 4s 후에 2번 출력하는 delay() 함수

js
function delay(sec){  
	return new Promise(res => setTimeout(res, sec * 1000));  
}
async function main(){  
	console.log(`1번`);  
	await delay(4);  
	console.log(`2번`);  
}
main();

중복 제거

Set 활용

js
const exampleArray = [4, 2, 9, 2, 4, 6, 8, 9];  
console.log([...new Set(exampleArray)]);

filter && indexOf 활용

js
const exampleArray = [4, 2, 9, 2, 4, 6, 8, 9];

function removeDuplicate(arr){  
	return arr.filter((value, index) => {  
		return arr.indexOf(value) === index;  
	});  
}

console.log(removeDuplicate(exampleArray));
  • indexOf는 배열에서 해당 value가 처음으로 어느 인덱스에 등장했는지 반환

forEach 활용

js
const exampleArray = [4, 2, 9, 2, 4, 6, 8, 9];

function removeDuplicate(arr){  
	const res = [];  
	arr.forEach((value) => {  
		if (!res.includes(value)){  
			res.push(value);  
		}  
	});  
	return res;  
}

console.log(removeDuplicate(exampleArray));

참고자료