이전에 호이스팅에 대해 두 번이나 정리한 적이 있지만, 호이스팅이 왜 발생하는지에 대해 다시 정리하고자 이 글을 통해 정리한다. 호이스팅JS에서의 호이스팅이란 변수 선언과 함수 선언이 코드의 최상단으로 끌어올려지는 것처럼 동작하는 특성을 의미한다.console.log(x); // undefinedconsole.log(y); // ReferenceError: Cannot access 'constance' before initializationconsole.log(z); // ReferenceError: Cannot access 'variable' before initializationvar x = 5;const y = 0;let z = 20;console.log(x); // 5console.log(y); ..
스코프
자바스크립트를 이용할 때 전역변수를 꼭 사용해야 하는 이유가 없다면 지역변수를 사용해야 한다. 왜 그런지는 이번 글에서 알아보자. 1 - 변수의 생명 주기 변수는 선언에 의해 생성되고 할당을 통해 값을 갖게된다. 그리고 생성이 되었으면 소멸하게 되는데 이를 생명 주기(Life cycle)를 갖는다고 한다. 변수에 생명 주기가 없다면 한번 선언된 변수는 프로그램이 종료되기 전까지 메모리 공간을 차지하게된다. 1-1. 지역 변수의 생명주기 변수는 선언된 위치에서 생성되고 소멸한다. 이를 봤을 때 전역 변수의 생명주기는 애플리케이션의 생명주기와 같다는 것을 알 수 있다. 하지만, 함수 내부(지역)에서 선언된 변수는 함수의 호출에는 생성되고 종료되면 소멸한다. function foo () { var x = "l..
1. 스코프란? 스코프란 식별자가 유효한 범위를 말한다. 혹은 자바스크립트 엔진이 식별자를 검색할 때 사용하는 규칙이라 할 수 있다. 이는 자바스크립트 엔진이 같은 이름의 식별자를 스코프를 통해 참조를 결정하는 식별자 결정에 영향을 준다. 자바스크립트 엔진은 코드 실행시 코드의 문백을 고려한다. "코드가 실행되는 위치와 주변 환경에 어떤 코드가 있는지"를 렉시컬 환경이라 부른다. 코드의 문맥은 렉시컬 환경으로 이뤄지며 이를 구현한 것이 실행 컨텍스트이다. var x = 'global'; function foo() { var x = 'local'; console.log(x); // 1 } foo(); console.log(x); // 2 만약 위의 코드에서 스코프란 개념이 없으면 같은 이름을 갖는 변수는 ..
1. 즉시 실행 함수 표현식의 조건 IIFE는 2가지 조건을 갖는다. 즉시 실행해야 한다. 함수 표현식이어야 한다. ➡ 함수 선언문이 아닌 즉, 함수 표현식을 즉시 실행하는 것을 의미하며 해당 함수는 익명함수와 기명함수 모두 가능하다. (function(){ console.log('IIFE'); })(); 위의 코드에서 익명함수로 표현된 함수를 괄호로 감쌌는데, 괄호를 사용하지 않고 작성하게 되면 함수 표현식이 아니라 함수 선언문이 되기 때문에 괄호를 이용해 함수 표현식으로 만든 것이다. 2. 3가지 즉시 실행 함수 표현식 문법과 화살 표현식 IIFE는 3가지 형태로 표현할 수 있다. 2-1 논리 부정 연산자(!) 논리 부정 연산자를 이용해 IIFE를 구현할 수 있다. 이렇게 하면 함수는 undefine..
클로저란? 클로저는 함수가 속한 렉시컬 환경을 기억해서 함수가 렉스컬 스코프 밖에서 실행될 때에도 함수가 속한 스코프에 접근할 수 있게 하는 기능을 말한다. function foo() { var a = 2; function bar(){ console.log(a); // 2 } return bar; } var func = foo(); func(); GC(Garbage Collector)가 foo()의 참조를 없앨 것 같지만, bar()가 해당 스코프에 있는 a를 참조하기 때문에 없애지 않는다. 그러므로 스코프 외부에서 bar()가 실행되면 스코프를 기억하고 있기에 2가 출력된다. 이때, 클로저는 bar()에서 발생하며, 이는 스코프 외부에서 foo()의 스코프안에 있는 bar()를 참조하기 때문이다. 다시..
호이스팅 이 개념은 선수지식으로 스코프를 알고 있어야 된다. 호이스팅이란? "끌어올린다" 라는 뜻으로 변수 및 함수 선언문이 스코프 내의 최상단으로 끌어욜려지는 현상을 말한다. 즉, 선언문이 어디에서 선언됐든 속하는 스코프 전체에서 존재하는 것처럼 취급되는 작용을 말한다. 주의할 점은 "선언문" 이며, "대입문"은 끌어올려지지 않는다. console.log(a); var a = 2; 컴파일러는 JS엔진이 *인터프리팅(Interpreting)을 하기 전에 컴파일을 하는데 이때, var a = 2; 를 2개의 구문으로 본다. * = 인터프리팅은 기계어를 기계어를 다른 언어로 번역할 필요 없이 프로그래밍 언어의 소스 코드를 바로 실행하는 컴퓨터 프로그램 또는 환경 var a a = 2 var a 는 변수 선언..