분류 전체보기(141)
-
[JavaScript] 자바스크립트에서 비동기 작업은 어떻게 동작할까?
일단 자바스크립트는 싱글 쓰레드 언어인데, 이는 오직 하나의 콜스택과 하나의 힙 메모리를 가진다는 것을 의미한다. 그러므로 자바스크립트는 한 번에 하나의 코드만을 실행할 수 있다. 자바스크립트에는 두 가지 작업이 있는데, 하나는 동기 작업 다른 하나는 비동기 작업이다. 동기 작업은 코드가 즉시 실행되고 비동기 작업은 로딩 과정을 거치고 실행된다는 차이가 있다. 동기식 코드 한줄씩 실행되는 방식으로 이전 라인이 끝나기 전에 각 라인 코드는 기다린다. 시간이 오래 걸리는 연산이면 다음 코드의 실행을 막는다. (Blocking) 비동기식 코드 비동기 코드는 백그라운드에서 실행되는 작업이 완료되면 코드가 실행된다. 본질적으로 논블록킹이다. (Non-Blocking) 실행은 비동기 작업이 끝나는 것을 기다리지 않..
2023.02.01 -
[Javascript] 함수와 일급 객체
일급 객체 다음 조건을 만족하는 객체를 말한다. 무명 리터럴로 생성할 수 있다. 변수나 자료구조에 저장할 수 있다. 함수의 매개변수에 전달할 수 있다. 함수의 반환값으로 사용할 수 있다. 함수는 일급 객체로 함수를 객체와 동일하게 사용할 수 있다. 그러나 일반 객체와 다른 점은 함수 객체는 호출할 수 있고 함수 객체만이 가지는 고유 프로퍼티가 있다. 함수 객체의 프로퍼티 브라우저 콘솔에서 console.dir 메서드를 사용하여 함수 객체 내부를 볼 수 있다. 함수 객체의 프로퍼티들을 볼 수 있다. function square(num){ return num*num; } console.log(Object.getOwnPropertyDescriptors(square)); square 함수의 모든 프로퍼티의 프로..
2022.10.24 -
[Javascript] 생성자 함수에 의한 객체 생성
Object 생성자 함수 new 연산자와 함께 Object 생성자 함수를 호출하면 빈 객체를 생성하여 반환한다. const person = new Object(); console.log(person); // {} person.name = 'Lee'; person.sayHello = function () { console.log('Hi! My name is ' + this.name); }; console.log(person); person.sayHello(); Object 생성자 함수 이외 String, Number, Boolean, Function, Array, Date, RegExp, Promise 등 빌트인 생성자 함수가 있다. 생성자 함수 생성자 함수는 new 연산자와 함께 호출하여 객체를 생성하는..
2022.10.23 -
[Javascript] 프로퍼티 어트리뷰트
내부 슬롯과 내부 메서드 자바스크립트 엔진 구현 알고리즘을 설명하기 위해 ECMAScript 사양에서 사용하는 의사 프로퍼티와 의사 메서드다. ECMAScript 사양에 등장하는 이중 대괄호 [ [ ... ] ] 로 감싼 이름들이 내부 슬롯과 내부 메서드다. 개발자는 직접 접근할 수 없는 자바스크립트 엔진 내부 로직이다. 하지만 일부 내부 슬롯과 내부 메서드에 한하여 간접적으로 접근할 수 있는 수단을 제공한다. 모든 객체는 [[Prototype]] 이라는 내부 슬롯을 갖는다. 내부 슬롯은 JS 엔진의 내부 로직이라 직접 접근할 수 없지만 __proto__ 를 통해 간접적으로 접근할 수 있다. const o = {}; o.[[Prototype]] // JS엔진 내부 로직으로 직접 접근 불가 o.__prot..
2022.10.11 -
[Javascript] let, const 키워드와 블록 레벨 스코프
var 키워드로 선언한 변수 문제점 변수 중복 선언 허용 var 키워드로 선언한 변수는 중복으로 선언이 가능하다. 중복 선언된 경우 중복 선언할 때 초기화문이 있는 경우는 재할당하고 초기화문이 없는 경우 변수 선언을 무시한다. var x = 1; var x = 100; // 재할당 var y = 1; var y; // 무시한다. console.log(x); // 100 console.log(y); // 1 함수 레벨 스코프 var 키워드로 선언한 변수는 함수 코드 블록만을 지역 스코프로 인정한다. 함수 외부에 var 키워드로 선언한 변수는 모두 전역 변수가 된다. var x = 1; if (true){ var x = 10; } console.log(x); // 10 변수 호이스팅 var 키워드로 변수를 ..
2022.10.09 -
[Javascript] 전역 변수 문제점
변수 생명 주기 지역 변수 생명 주기 함수 내부에 선언된 지역 변수는 함수가 호출되면 생성되고 함수가 종료하면 소멸한다. function foo(){ var x = 'local'; console.log(x); return x; } foo(); console.log(x); // error 변수 선언은 런타임 이전 단계에서 JS엔진에 의해 먼저 실행되지만 전역 변수에 한정된 것이다. 함수 내부에 선언된 변수는 함수가 호출된 직후 함수 내부 코드 실행 전 JS엔진에 의해 먼저 실행된다. 일반적으로 지역변수와 함수의 생명주기는 일치하지만 함수보다 오래 생존하는 경우가 있다. 함수 내부에 선언된 지역 변수는 함수가 생성한 스코프인 렉시컬 환경에 등록된다. 변수에 할당된 메모리 공간은 아무도 참조하지 않을 때 가비..
2022.10.07