본문 바로가기

Language

(17)
[JS Flow] 클로저(closure) 클로저란 ? '함수'와 '그 함수가 선언될 당시의 lexical environment'의 조합 (lexical environment : 선언당시의 환경에 대한 정보를 담는 객체) 이게 무슨 말이람??? 예시를 들어보자. 다음과 같은 코드가 있다. 처음엔 전역에서 변수를 수집한다. outer함수가 실행되면서 변수를 수집한다. outer함수가 종료되었고, outer2변수에 inner함수가 담긴다. 👉빗금이 쳐있는 이유? outer2가 inner함수를 호출할거니까 inner함수가 참조하고 있는 a를 kill 할 수 없는것임. outer2를 실행하면 inner가 참조하고 있던 a의 값이 바뀐다. outer2함수가 종료되고 2를 출력한다. 다시 outer2를 실행하면 inner가 참조하고 있던 a의 값이 바뀐다...
[JS Flow] this this 호출하는 방식 ✔ 전역공간에서 : window / global ✔ 함수 내부에서 : window / global ✔ 메소드 호출시 : 메소드 호출 주체 (메소드명 앞) ✔ callback에서 : 기본적으로는 함수내부에서와 동일 ✔ 생성자 함수에서 : 인스턴스 요약하자면 이렇다. 세부적인 내용을 살펴보자. 전역공간에서, 함수 내부에서 전역공간에서, 함수 내부에서 호출되는 this는 같다. 자바스크립트의 버그?라고 볼 수 있다구함.. 함수는 전역객체의 메소드다! 라고 생각하자. 메소드 호출시 메소드명 b앞에 있는 a가 this이다. 다음과 같은 로그가 출력된다. 메소드명은 c니까 a.b가 this이다. 다음과 같은 로그가 출력된다. 메소드 안에 내부함수가 있을때, 그 안에서 this가 문제될 수가 ..
[JS Flow] callback함수 callback 함수 특징 ✔ 다른 함수(A)의 매개변수로 콜백함수(B)를 전달하면, A가 B의 제어권을 갖게된다. ✔ A에 미리 정해진 방식에 따라 B를 호출한다. ✔ 미리 정해진 방식이란 this에 무엇을 바인딩 할지, 매개변수에는 어떤 값들을 지정할지, 어떤 타이밍에 콜백을 호출할지 등이다. 여러 함수들의 정의 📌setInterval 정의 setInterval( callback, millisecond ) 코드 📌forEach 정의 arr.forEach( callback [, thisArg] ) []는 생략 가능하다는 표시다. 코드 📌addEventListener 정의 addEventListener( type, callback [, option] ) 코드
[JS Flow] 실행 컨텍스트 (hoisting, scope chain) Execution Context 란? ✔ 실행에 필요한 코드 흐름상의 배경이 되는 조건/환경 ✔ 동일한 조건/환경을 지니는 코드뭉치를 실행할 때 필요한 조건/환경정보 ✔ 함수 or 전역공간 👉 함수를 실행할 때 필요한 환경정보를 담은 객체 라고 대략적인 설명이 가능하다. 여기서, 가장 중요한 개념은 Lexical Environment인데 ✔ environmentRecord ✔ outerEnvironmentReference 로 나뉘고, 각각 hoisting과 scope chain으로도 말할 수 있다. environmentRecord hoisting : 현재 문맥의 식별자 정보를 실행 컨텍스트의 맨위로 끌어올린다 위의 코드가 hoisting 된다면, 다음과 같다. 끌어올려진 정보 전체가 environment..
[JS Flow] 데이터 타입 데이터 타입의 종류 Primitive Type(기본타입) : number, string, boolean, null, undefined Reference Type(참조타입) : object 👉 array, function, regexp 두가지 타입을 구분을 하는 이유! 어떤 차이가 있을까? 기본타입으로 변수를 선언, 값을 변경하는 메모리 그림이다. 참조하는 메모리 주소값을 바꾼다. 다음은 참조타입이다. obj이름이 가리키고 있는 값의 주소는 변경되지 않았다. 다음은 참조타입에서 중첩 객체이다. arr의 값이 바뀌면서 배열에 할당되어 있던 메모리들은 Garbage Collectiong을 당한다💥
[python] bisect / 이진 탐색 내장함수 import bisect 두가지 종류로 분류 가능 주어진 리스트 list, 값 x가 있을 때, x가 들어갈 인덱스를 구하는 함수 값 x를 이진탐색으로 넣는 함수 bisect.bisect_left(list, x) : list에서 x가 들어가야할 인덱스 값을 구한다 bisect.bisec_right(list, x) : list에서 x가 들어가야할 인덱스 값을 구하지만, 동일한 값이 있을 경우 동일한 값의 오른쪽 인덱스 값을 구한다 bisect.insort(list, x) : binary search로 x 값을 list에 넣는다 EX 문제 https://www.hackerrank.com/challenges/fraudulent-activity-notifications/problem?h_l=interview&pl..
[ES6] 기본 개념 정리 let과 const let은 변수, 선언된 변수는 다시 선언 불가 const는 상수, 선언하면서 초기화 필수 let myName; console.log(myName); let으로 선언되고 초기화 하지 않은 변수는 undefined로 정의된다 const name = 'kim'; name = 'lee';//error const animal = { name: 'cat', weight: 5 }; animal.name = 'dog'; console.log(animal); const상수를 변경하는것은 에러가 나지만, const객체의 프로퍼티는 변경 가능하다 표현식과 템플릿 문자열 백틱(backtick)문자 `를 사용 템플릿 문자열 표현식 처리 let name = "jack"; let weight = 60; cons..
[python] 리스트 정리 슬라이스 oddnumber = [1, 3, 5, 7, 9] cafes = ['star', 'bene', 'yoger', 'friends'] A = [1, 5, 'A', 'CC', 'B'] listInList = [[1, 3, 5, 6, 7], cafes, oddnumber, 1, 3, 'Abc'] a = oddnumber[1:5] b = cafes[1:] c = A[:2] d = listInList[0][1:4] #리스트 내 리스트 접근 print(a) #[3, 5, 7, 6] print(b) #['bene', 'yoger', 'friends'] print(c) #[1, 5] print(d) #[3, 5, 6] 삭제 numbers = [2, 4, 6, 8, 10, 1, 3, 5, 7, 9] numbers..