///////
Search

+ 예전 딥다이브 퀴즈

rest params

Q1.
function bar (param1,param2,...rest){ console.log(param2) //? console.log(rest) //? } bar(1,2,3,4,5)
JavaScript
복사
function bar (...rest,param1,param2){ console.log(param2) //? console.log(rest) //? } bar(1,2,3,4,5)
JavaScript
복사

매개변수 기본값

Q2.
function foo(name = "LEE"){ console.log(name); } foo(); // ? foo(undefined); //? foo(null); //?
JavaScript
복사

이터레이션 프로토콜

이터러블 프로토콜이란?
이터러블에는 어떤 문법, 연산을 사용할 수 있는가?
이터레이터 프로토콜
class Stack { constructor(arr) { if (!arr.hasOwnProperty("length")) throw Error("배열 형식이 아닌 객체는 할당할 수 없습니다."); this._stack = arr ? Array.from(arr) : []; } push(value) { this._stack.push(value); } pop() { return this._stack.pop(); } top() { return this._stack[this._stack.length - 1]; } // Symbol.itertor 메서드가 이터레이터를 반환하므로 이터러블이다. [Symbol.iterator]() { const { _stack } = this; let index = _stack.length; // 이터레이터 return { next() { return { value: _stack[--index], done: index === -1 }; }, }; } iterator() { return this[Symbol.iterator](); } } const { log } = console; const stack1 = new Stack([1, 2, 3]); for (let i of stack1) { log(i); } const stack2 = new Stack({ 0: 4, 1: 5, 2: 6, length: 3 }); log([...stack2, ...stack1]); const i1 = stack1.iterator(); while (1) { const res = i1.next(); if (res.done) break; log(res); }
JavaScript
복사
for … infor … of의 차이점은?

지연평가

지연 평가란? 그리고 그 이점은?
아래 코드의 결과
function take(iter, n) { let res =[]; for(let value of iter) { res.push(value); console.log(value) if(res.length === n) return res; } } function evaluate(n=10) { const res = []; for(let i=0; i<n; ++i) { console.log('evaluate ' + i); res[i] = i; } return res; } // 제너레이터 함수: 이터러블이면서 동시에 이터레이터인 제너레이터 객체를 반환. function* evaluateLazy(n=10) { for(let i=0; i<n; ++i) { console.log('evaluate lazy' +i); yield i; } } const arr1 = take(evaluate(10), 5); const arr2 = take(evaluateLazy(10), 5); console.log(arr1); console.log(arr2);
JavaScript
복사
지연평가의 성능상 이점
const arr = Array.from({length: 1000000}, ()=>0); console.time('strict') arr .map((_, i) => i) .map((x) => x**2) .slice(0, 10) console.timeEnd('strict'); const {from} = rxjs; const {map, tap, take} = rxjs.operators; const lazyArray = from(arr); console.time('lazy') lazyArray.pipe( map((_, i) => i), map((x) => x**2), take(10), ).subscribe() console.timeEnd('lazy');
JavaScript
복사

스프레드 문제

var a = [1,2,3]; var b = ['you', 'are']; var c = function(a,b){ console.log( [[...a], ...[...b]][1] ) } c(a,b)
JavaScript
복사