목록Javascript (43)
김 양의 멋따라 개발따기
1. 일급객체(first-class object) 객체, 함수처럼 일반 객체처럼 모든 연산이 가능한 것 함수의 매개변수로 전달 함수의 반환값 할당명령문 동일 비교 대상 2. 고차함수(Higher-order function) 인자로 함수를 받거나(콜백함수) 함수를 반환하는 함수 3. 콜백함수 전달될 당시에 함수를 바로 호출해서 반환된 값을 전달하는 게 아니라 함수를 가리키고 있는 함수의 레퍼런스(참조값)가 전달됨. 인자로 받은 함수는 고차함수 안에서 필요한 순간에 호출이 나중에 됨
1. 호이스팅(Hoisting) 인터프리터가 변수와 함수의 메모리 공간을 선언 전에 미리 할당하는 것을 의미합니다. 즉, 자바스크립트 엔진(인터프리터)이 코드를 실행하기 전, 변수, 함수, 클래스의 선언문을 끌어올리는 것을 말합니다. 변수의 선언과 초기화를 분리한 후, 선언만 코드의 최상단으로 옮깁니다. 예외)var : 변수의 선언과 초기화 모두 최상단으로 옮김 //함수의 호이스팅은 함수의 선언문 전에 호출이 가능하게 해줌 //함수의 선언문은 선언 이전에도 호출이 가능 dog() // 에러 없이 rive 출력 function dog(){ console.log("rive") } //변수(let, const)와 클래스는 선언만 호이스팅이 되고, //초기화는 호이스팅이 안 됨 //초기화 전, 변수에 접근하면 ..

1. var 코드의 가독성과 유지보수성에 좋지 않음 일반 코딩방식과 어긋남 변수를 선언하는 키워드(var) 없이 선언 & 할당이 가능함. 선언인지, 재할당인지 구분하기 어려움 rive = "good boy"; console.log(rive) //-> good boy 출력 중복선언이 가능함 var rive = "good" var rive = "boy" // 에러 발생 X //비교 let rive = "good"; let rive = "boy" // 에러 발생! let은 재할당만 가능 재선언 불가능 rive = "boy" // 에러 발생 X 블록 레벨 스코프가 안 되어 지역변수로 선언이 안 됨 var dog = "rive"; { var dog = "sieo"; { var dog = "noah"; } } co..
let a = 1; //a++ 필요한 연산을 한 뒤 값을 증가시킴 //++a 값을 먼저 증가하고 필요한 연산을 함 a++; // a = a + 1; => 2 a --; // a = a - 1; => 1 a = 0; let b = a++ //b=0 a=1 a = 0; let c = ++a //c=1 a=1
자바스크립트는 싱글 쓰레드? 자바스크립트의 메인 쓰레드인 이벤트 루프가 싱글 쓰레드이기 때문에 자바스크립트를 싱글 쓰레드 언어라고 부른다. 하지만 이벤트 루프만 독립적으로 실행되지 않고 웹 브라우저나 NodeJS같은 멀티 쓰레드 환경에서 실행된다. 즉, 자바스크립트 자체는 싱글 쓰레드가 맞지만 자바스크립트 런타임은 싱글 쓰레드가 아니다.

1. 자바스크립트 엔진 자바스크립트 엔진은 크게 메모리 힙, 콜 스택으로 나뉜다. 메모리 힙(Memory Heap) 메모리 할당이 일어나는 곳 콜 스택(Call Stack) 코드 실행에 따라 호출 스택이 쌓이는 곳 함수 호출 시 해당 함수의 호출 정보가 쌓여있는 스택 2. 실행 컨텍스트(Execution Context) 코드의 실행순서와 스코프를 기억합니다. 실행 가능한 JavaScript 코드 블럭이 실행되는 환경을 의마합니다. 실행되는 순서대로 콜 스택(call stack)에 쌓였다가, 가장 위에 쌓여있는 컨텍스트와 관련 있는 코드들을 실행하는 식으로 동일한 환경과 순서를 보장한다. 실행컨텍스트가 형성되는 3가지 경우 전역코드 eval()함수로 실행되는 코드 함수 안의 코드가 실행되는 경우 // 1번..
스코프(Scope)란? 변수를 참조할 수 있는(접근할 수 있는) 유효한 범위 식별자(변수이름, 함수이름, 클래스 이름)가 유효한 범위 따라서 선언된 위치에 따라 유효 범위가 결정됩니다 전역스코프 전역변수, 전역스코프, 글로벌 변수, 글로벌 스코프 블럭 밖에서 선언된 변수 글로벌 변수는 앱이 종료될 때까지 계속 메모리에 유지 가급적 피하는 것이 좋음 지역스코프 지역변수, 로컬변수, 지역스코프, 로컬 스코프 블럭 안에서 선언된 변수 블럭 안의 변수는 블럭 안에서만 유효합니다 블럭 외부에서는 블럭 내부의 변수를 참조할 수 없습니다. 함수 외부에서는 함수 내부의 변수를 참조할 수 없습니다. 함수 외부에서는 함수의 매개변수를 참조할 수 없습니다. 스코프는 블럭 안에서 유효 범위가 결정 됨 참조한 변수가 해당 블럭..
async, await 프로미스 사용을 편하게 하기 위해 javascript Es8에서 나온 문법 키워드 프로미스의 후속처리 메서드를 조금 더 편하게 사용하기 위해 등장함 1) async 함수 앞에 async를 붙여서 사용합니다. 항상 프라미스를 반환합니다. (프라미스가 아닌 값이라도, 프라미스로 감싸서 반환!) // async는 function 앞에 써줍니다. async function myFunc() { return "프라미스를 반환해요!"; // 프라미스가 아닌 걸 반환해볼게요! } myFunc().then(result => {console.log(result)}); // 콘솔로 확인해봅시다! //화살표 함수일 경우 //함수의 인수 자리 앞쪽에 사용! const myFunc = async()=>{}..

1. 비동기 Javascript는 싱글 쓰레드로 동작하는 언어입니다.(메인 쓰레드 하나와 콜스택 하나로 구성) Javascript는 기본적으로는 run to completion(일을 하나씩 처리) 동기방식이지만, 비동기 방식으로도 처리할 수 있습니다. Javascript의 비동기 처리란 특정 코드의 연산이 끝날 때까지 코드의 실행을 멈추지 않고 다음 코드를 먼저 실행하는 Javascript의 특성을 의미합니다. 동시성(Concurrency) 자바스크립트는 기본적으로 한번에 하나의 일만 처리하지만, 프로젝트가 돌아가는 걸 보면 여러 작업이 한 번에 처리되는 것처럼 느껴집니다. 이걸 두고 동시성이라고 부릅니다. 한 번에 여러개가 처리되는 것처럼 보이는 걸 말합니다 (실제로 동시에 실행되는 건 아닙니다. 실제..

1. TDZ(Temporal Dead Zone)란? 일시적 사각지대라는 뜻입니다. 이 일시적인 사각지대는 스코프의 시작 지점부터 초기화 시작 지점까지의 구간을 말합니다. 2. 변수 선언의 3단계 javascript에서의 변수는 선언=>초기화=> 할당이라는 3단계를 거쳐서 생성됩니다. 선언단계 : 변수를 실행 컨텍스트의 변수 객체에 등록하는 단계 이 변수 객체는 스코프가 참조하는 대상이 됨 초기화 단계 : 실행 컨택스트에 존재 하는 변수 객체에 선언 단계의 변수를 위한 메모리를 만드는 단계 이 단계에서 할당된 메모리에는 undefined로 초기화 됨 할당 단계 : 사용자가 undefined로 초기화 된 메모리의 다른 값을 할당하는 단계 //예시 let a = 1; //1. 선언 => let a //2. 초..