FrontEnd

    [JS] DeepDive(20) strict mode

    function foo() { x = 10; } foo(); console.log(x); // ? foo 함수 내에서 선언하지 않은 x변수에 값 10을 할당했다. 따라서 ReferenceError를 발생시킬 것 같지만 JS는 위 경우 암묵적으로 전역 객체에 x프로퍼티를 동적으로 생성한다. 이러한 개발자의 의도와 상관없는 암묵적 전역은 오류를 발생시킬 원인이 될 수 있다. 따라서 var,let,const 등 키워드를 활용해서 변수를 선언하는것이 좋지만 사람은 누구나 실수를 할 수 있다. 이런 상황을 막아주기 위해서 strict mode가 추가되었다.물론 ESLink와 같은 도구를 활용할 수도 있다. strict mode의 적용 'use strict'를 전역의 선두 혹은 함수 몸체의 선두에 추가하면 된다. ..

    [JS] 2*n 타일링

    피보나치 수열과 유사한 형태로 답이 나오게 된다. 1,2,3,5,8,13 ... 단, 재귀를 활용하면 시간초과가 나오니 dp를 활용해서 풀었다! function solution(n) { const dp = Array(n) dp[0] = 1 dp[1] = 2 if (n

    [JS] DeepDive(19) 프로토타입 -2

    function Person(name) { this.name = name; } // 프로토타입 메서드 Person.prototype.sayHello = function () { console.log(`Hi! My name is ${this.name}`); }; const me = new Person('Lee'); // hasOwnProperty는 Object.prototype의 메서드다. console.log(me.hasOwnProperty('name')); // true Person 생성자 함수에 의해 생성된 me 객체는 Object.prototype의 메서드인 hasOwnProperty를 호출할 수 있다. 즉 me객체는 Person.prototype 뿐 아니라 Object.prototype도 상속받았..

    [JS] DeepDive(19) 프로토타입 - 1

    자바스크립트는 명령형, 함수형, 프로토타입 기반 객체지향 프로그래밍을 지원하는 멀티 패러다임 프로그래밍 언어이다. 물론 JS는 클래스기반 객체지향 프로그래망과는 다르게 클래스,상속,public,private,protected 등이 없다. 하지만 JS는 클래스 기반 객체지향 프로그래밍 언어보다 효율적이며 더 강력한 객체지향 프로그래밍 능력을 지닌 프로토타입 기반의 객체지향 프로그래밍 언어이다. 물론 ES6에서 클래스가 도입되긴 했다. JS에선 클래스도 함수이며 기존 프로토타입 기반 패턴의 문법적 설탕이다. JS는 객체기반의 프로그래밍 언어이며 JS를 이루는 거의 모든 것이 객체이다. 객체지향 프로그래밍 객체지향 프로그래밍은 프로그램을 명령어 또는 함수의 목록으로 보는 전통적인 명령형 프로그래밍의 절차지향적..

    [JS] DeepDive(18) 함수와 일급 객체

    다음과 같은 조건을 만족하는 객체를 일급 객체라 한다. 1. 무명의 리터럴로 생성할 수 있다. 즉 런타임에 생성이 가능하다. 2. 변수나 자료구조에 저장할 수 있다. 3. 함수의 매개변수에 전달할 수 있다. 4. 함수의 반환값으로 사용할 수 있다. // 1. 함수는 무명의 리터럴로 생성할 수 있다. // 2. 함수는 변수에 저장할 수 있다. // 런타임(할당 단계)에 함수 리터럴이 평가되어 함수 객체가 생성되고 변수에 할당된다. const increase = function (num) { return ++num; }; const decrease = function (num) { return --num; }; // 2. 함수는 객체에 저장할 수 있다. const auxs = { increase, decre..

    [JS] 올바른 괄호

    괄호가 올바른지 아닌지만 구별하면 되기에 굳이 스택을 사용하지 않고 변수를 활용해보았다 ( 가들어오면 1을 더해주고 )가 오면 -1을 해주었다. 만약 cnt가 음수가 되면 올바른 괄호가 아닌 것이다. function solution(s){ let cnt = 0 for (let el of s) { if (el === '(') cnt +=1 else cnt -= 1 if(cnt < 0) { return false } } return cnt === 0? true: false; }