
비동기 방식이란 논 블로킹 형태로 동작하는 방식이라는 것을 의미한다. 그럼 논 블로킹 방식이란 무엇인가? 이 논 블로킹 방식은 콜백함수를 반환하는 코드 방식을 의미한다. 이에 대해 구체적으로 설명해보고자 한다. 비동기 방식은 메인 쓰레드가 있으며 실제 코드를 실행하는 역할을 한다. 잠깐 용어를 짚고 넘어가자! 프로세스란 단순히 실행중인 프로그램을 의미하며 쓰레드는 이 프로세스 내에서 실제로 작업을 수행하는 주체이다. 다시 비동기 방식의 얘기로 돌아오자! 이 메인 쓰레드가 실제 코드를 실행할 때 실행시간이 좀 오래 걸린다고 판단하면 다른 쓰레드에게 '방금 내가 맡은 코드가 실행시간이 좀 오래 걸릴 거 같은데 너가 대신 실행해줘!'라고 하며 작업을 넘기고 다른 코드를 실행시키는 작업을 한다. 그러면 메인 쓰..

클로저란 특정 함수가 선언될 때 해당 함수의 렉시컬 환경을 기억하는 함수를 의미한다. 여기서 만약 렉시컬 환경을 모른다면 이전의 '실행 컨텍스트(Execution context)와 스코프체인(scope chain)' 페이지를 읽고 관련 용어를 이해한 후에 클로저 게시물을 읽기를 권장한다. 일단 코드를 통해 클로저를 설명하고자 한다. function myAge(){ let age = 10; return { subtract : function(){age--;}, lookup : function(){return age;} }; }; const addAge1 = myAge() const addAge2 = myAge() addAge1.subtract() addAge1.subtract() console.log(ad..

호이스팅을 직역하면 '끌어 올리기'를 의미한다. 자바스크립트 생태계에서 말하는 호이스팅이란 변수 혹은 함수를 선언하기 전에 메모리 공간에 미리 할당하여 해당 변수 혹은 함수를 사용할 수 있게끔 해주는 것을 의미한다. 그럼 코드로 알아보자! Hi(); function Hi(){ console.log('안녕하세요:)') }; 위처럼 함수를 선언하는 코드보다 함수를 실행하는 코드가 위에 있어도 정상적으로 함수가 에러 없이 실행된다는 것이다. 이것은 호이스팅의 원리로 인해 함수를 선언하는 코드가 함수 실행 코드가 실행되기 전에 미리 메모리에 할당되었기 때문에 가능한 것이다. 하지만 다음과 같은 코드는 어떨까? Hi2(); var Hi2 = function(){ console.log('안녕하세요') } 결과는 다..

자바스크립트는 ES6문법이 나오기 전까지 변수를 선언할 때 항상 var를 사용해왔다. 하지만 새로운 변수 선언 방식이 나오면서 변수의 유효범위에 따라 변수 선언 방식을 다양하게 사용할 수 있게 되었다. 이 새로운 변수 선언 방식인 const와 let은 변수를 선언할 때 해당 변수의 유효범위를 블록범위로 지정하는 공통적인 기능이 있다. 여기서 한가지 짚고 넘어 가자면 var는 유효범위가 함수범위라는 것을 기억하고 예시코드를 살펴보자! var name = "choi" function name1(){ if(true){ var name = "Kim" } console.log(name) } function name2(){ if(true){ const name = "Lee" } console.log(name) } ..

스코프 체인을 이해하기 위해서는 우선 실행 컨텍스트(Execution context)와 렉시컬 환경(Lexical environment)을 알아야 할 필요가 있다. 우선 실행 컨텍스트란 자바스크립의 동작원리를 담고 있는 핵심이라고 보면 된다. 실행 컨텍스트는 자바스크립트의 코드가 실행하는데 필요한 정보를 갖고 있다. 이 실행 컨텍스트는 코드가 실행될 때 생성되며 여기서 코드란 전역 코드, 함수코드, eval, 모듈 코드를 말한다. 일단 처음에는 전역코드가 가장 먼저 실행된다. 이때 전역 컨텍스트를 생성하며 전역코드를 위에서 아래로 순차적으로 훑는다. 훑는 과정에서 함수 호출문을 만나면 새로운 실행 컨텍스트가 생성되고 해당 함수의 첫부분부터 순차적으로 훑는다. 이때 실행 컨텍스트를 스택(stack)으로 관..

스코프는 간단히 말하자면 유효한 '변수 혹은 함수의 매개변수의 범위'를 의미한다. 여기서 알아두면 좋은 점은 자바스크립트는 기본적으로 전역 혹은 함수 단위로 스코프를 생성한다. 다시 얘기하자면 특정 함수를 선언하였고 그 함수 안에서 선언한 변수들은 함수 블록 안에서만 유효하며 접근이 가능하다는 것이다. 한편 전역에서 선언한 변수들은 함수 내부는 물론 함수 외부에서도 유효하며 접근이 가능하다. 그럼 다음과 같이 코드를 살펴보며 구체적으로 이해를 해보자. var name = 'jinyoung'; console.log(name); function myNickname(){ var nickname = 'jyp'; console.log(nickname); }; myNickname(); console.log(nick..