전체 글45 JavaScript | 콜백 함수 와 콜백 지옥 콜백 함수란? 함수의 매개변수를 통해 다른 함수의 내부로 전달되는 함수를 콜백 함수 callback function이라고 한다. 콜백 함수는 고차 함수에 의해 호출되며, 이때 고차함수는 필요에 따라 콜백 함수에 인수를 전달할 수 있다. 콜백 함수가 필요한 이유 자바스크립트는 비동기 프로그래밍을 위한, 즉 이벤트를 처리하기 위해 만들어진 언어기 때문에 한 명령에 대한 응답을 기다리는 것 보다 다음 명령을 수행하기 위해서 콜백 함수를 사용한다. 자바스크립트 V8 엔진은 싱글 스레드이기 때문에 동시에 여러개의 명령을 수행할 수 없다. 따라서 한 명령의 응답이 오래 걸리게 된다면, 속도가 매우 느려지게 될 것이다. 하지만 비동기적 프로그래밍 방식으로 콜백함수를 사용하면 자바스크립트 엔진이 브라우저나 node.j.. 2021. 9. 15. JavaScript 예습 | 16~18장 16장 프로퍼티 어트리뷰트 16.1 내부 슬롯과 내부 메서드 내부 슬롯 internal slot 자바스크립트 엔진의 구현 알고리즘을 설명하기위해 ECMAScript 사양에서 사용하는 의사 프로퍼티(pseudo property) 내부 메서드 internal method 자바스크립트 엔진의 구현 알고리즘을 설명하기위해 ECMAScript 사양에서 사용하는 의사 메서드(pseudo method) 내부 슬롯과 내부 메서드는 ECMAScript 사양에 정의된 대로 구현되어 자바스크립트 엔진에서 실제로 동작한다. 하지만 개발자가 직접 접근할 수 있도록 외부로 공개된 객체의 프로퍼티는 아니다. 원칙적으로 자바스크립트는 내부 슬롯과 내부 메서드에 직접적으로 접근하거나 호출할 수 있는 방법을 제공하지 않는다. 예) [[.. 2021. 9. 14. JavaScript | 함수 선언문 vs. 함수 리터럴 함수 선언문 vs 함수 리터럴 함수 선언문과 함수 리터럴은 형태가 동일하다. 그러면 자바스크립트는 어떻게 해석하는가? 문맥에 따라 함수 선언문이여야 하는지, 함수 리터럴이여야 하는지를 판단한다. 아래 예제를 보자. // 함수 리터럴 var add = function add(x, y) { return x + y; } // 함수 호출 console.log(add(2, 5)); // 7 위에서 function add를 함수 선언문이라고 가정하면, 할당 연산자에 의해서 변수에 값이 할당될 수 있어야 한다. 즉 함수 선언문은 값으로 평가될 수 있어야 한다. 하지만 함수 선언문은 표현식이 아닌 문, 즉 값으로 평가될 수 없으므로 해당 자리에는 함수 선언문이 올 수 없다. 따라서 값으로 평가될 수 있는 함수 리터럴이.. 2021. 9. 14. 합집합 찾기 Union - Find Set 알고리즘 합집합 찾기(Union and Find Set) 알고리즘 많은 서로소 부분 집합들로 나눠진 원소들에 대한 정보를 저장하고 조작하는 자료 구조이다. 두개의 연산을 수행한다. Find 어떤 원소가 주어졌을 때 이 원소가 속한 집합을 반환한다. 어떤 원소가 속한 집합을 대표하는 원소를 반환하는데, 이를 위해 어떤 원소와 각 대표 원소들 간의 파인드 결과를 비교하여 같은 집합임을 판단한다. Union 두 개의 집합을 하나의 집합으로 합친다. 예제 문제 오늘은 새 학기 새로운 반에서 처음 시작하는 날이다. 철수네 반 학생은 N명이다. 철수는 각학생들의 친구관계를 알고 싶다. 모든 학생은 1부터 N까지 번호가 부여되어 있고, 철수에게는 각각 두 명의 학생은 친구 관계가 번호로 표현된 숫자쌍이 주어진다. 만약 (1,.. 2021. 9. 13. JavaScript 수업 | [deep dive] 10~ 안물어본다!! 위의 메모리 구조를 사용하고 있을지 모른다. Heap, Call stack 안나온다. 모른다. V8엔진이나, 스파이더 몽키,.. 엔진마다 다르다. 하지만 표준은 아니다. (ECMAScript) 원시값들은 내부적으로 객체 프로퍼티에 저장된다. Heap은 논리적인 개념임... 객체를 상태로 가지고 있을 경우 불변성을 유지해야한다. push, pop, shift, unshift 사용해서는 안된다! 원시값을 담은 변수는 수정하면 주소값이 바뀜. 객체를 담은 변수는 수정해도 주소값은 그대로임. 따라서 객체가 변경되었는지 확인할 방법이 없음 그래서 요즘엔 객체를 불변값으로 사용하려고 하고있다. Number.isNaN, isNaN Number.isNaN: NaN일때만 true isNaN: 숫자로 변환한.. 2021. 9. 13. JavaScript 예습 | [deep dive] 13 ~ 15장 13장 스코프 13.1 스코프란? 스코프 scope (유효범위) 스코프는 식별자가 유효한 범위를 말한다. 모든 식별자(변수 이름, 함수 이름, 클래스 이름 등)는 자신이 선언된 위치에 의해 다른 코드가 식별자 자신을 참조할 수 있는 유효범위가 결정된다. 이를 스코프라고 한다. 스코프는 자바스크립트 엔진이 식별자를 검색할 때 사용하는 규칙이다. 식별자 결정 identiflier resolution var x = "global"; function foo() { var x = "local"; console.log(x); // local return x; } foo(); console.log(x); // global 자바스크립트 엔진은 이름이 같은 두 개의 변수 중에 어떤 변수를 참조해야 할 것인지를 결정해야한.. 2021. 9. 12. 이전 1 2 3 4 5 ··· 8 다음