목록자바스크립트 개념 (21)
FrontEngineer JungBam
클로저 : '함수와 그 함수가 선언되었을 때의 렉시컬 환경과의 조합' ☞ 자신을 포함하고 있는 외부 함수가 생명주기를 다하더라도 해당 외부함수의 매개변수와 변수들을 접근할 수 있다. 이게 무슨 말이냐하면 지역-렉시컬 스코프라는 개념에 의해서는 변수의 생명주기는 {}에 의해 정해지는데 해당 함수가 호출되어 실행이 끝난 뒤에도 실행중인 내부함수에 의해 그 함수의 변수가 살아 있을 때 그 내부함수를 클로저라고 부른다. const add = ()=>{ let level = 1 console.log(level) level++ } // add 함수의 실행주기 die add() // 1 add() // 1 위의 예제를 보면 알 수 있듯이 add 함수의 지역-렉시컬 스코프에 따라 생명주기가 끝나면 level이라는 변수..
1. 함수 : 모듈화의 근간(어떠한 목적으로 인해 하나의 기능에 문장을 모아놓은 것) ☞ 그럼 왜 함수를 써야하지? ① 코드의 재사용 → 하나의 묶음이란 것은 유지보수의 편의성까지 제공 → 하나의 작업에 대한 획일성을 제공하고 이 점은 코드의 신뢰성을 증대 ② 정보의 구성 및 은닉 ③ 객체의 행위를 지정 → 식별자를 통한 어떠한 행위인지가 인지되어야 함.(코드의 가독성을 향상) 2. 함수라는 자식은 Function.prototype에 연결된 객체(Function.prototype은 Object.prototype에 연결됨.) 3. 함수의 구성 예약어 : function 함수의 이름 : 식별자 / 함수가 호출될 때 사용됨. - 재귀의 필요성이 없을 때에 익명함수로 작성하기도 함. 매개변수 : 함수가 호출될 ..
① 암묵적 결합 - 전역에 변수를 선언하는 것은 코드 어디서든 참조하고 변경할 수 있는 암묵적 결합을허용하는 것 - 변수의 스코프가 클수록 해당 변수의 목적이 애매해지고 사용되는 기능이 많아질수록 가독성이 떨어지게 됨. - 또한 암묵적 결합으로 인한 의도치 않은 변경으로 인한 위험성도 동반된다. ② 긴 생명주기 - 생명주기란 것은 결국 메모리 자원을 할당하고 있는 기간인데 전역에 선언하는 것은 코드가 끝날 때까지 생명주기를 부여하는 것과 같다. 생명주기가 긴 객체들이 많다는 것은 그만큼 메모리 자원이 많이 할당된다는 것이고 의도치 않은 스코프에서 의도치 않게 변경 조작되어 생각치 못한 런타임 에러를 가져올 수 있다. ③ 스코프 체인 종점에 존재 - 스코프 체인이란 변수를 찾는 자바스크립트의 방식으로 현재..
1. var는 전역 스코프와 함수 스코프만을 갖고 있어 {}블록 스코프를 이용한 변수의 생명주가를 부여하지 못하고 {}단위에서의 변수를 사용하고자 할때 사용할 수 없음. let과 const는 블록 스코프를 가지며 이로 인해 함수 내부 블록 스코프에서도 별도의 스코프로 변수들이 존재하는 범위를 지정하여 사용할 수 있음. 2. var의 중복선언 가능한 점이 휴먼 이슈로 이어질 수 있는 부분 ※ var a로 중복 선언이 가능함. var a = 2 var a = 3 → 1번 이유와 2번 이유를 합치면 함수 내부에서 의도치 않은 선언 으로 인하여 예기치 못한 오류와 예상하지 못한 결과를 반환할 수 있음. 3. 호이스팅의 차이 var는 변수 호이스팅 과정에서 선언되는 코드 이전에도 식별자는 선언되어 있어 참조가 가..
깊은 복사 : 값을 복사하는 것. 얕은 복사 : 값을 갖고있는 주소값을 복사하는 것. → 이 때에는 실제 값을 갖고 있는 메모리 셀이 변경되면 주소값을 복사했기 때문에 그 값이 의도하지 않더라도 변하게 됨. ★ 이러한 얕은 복사로 인한 원본 손상에 대한 방지를 위한 Object 메소드로 Object.freeze()가 있다. 깊은 복사와 얕은 복사를 각각 사용해야 할 경우를 고민하고 사용해야함. 스프레드 연산자를 이용한 깊은 복사 ☞ 배열이나 깊이가 1인 객체의 경우 가능하나, 깊이가 2 이상인 경우 참조값에 따른 값을 가져오는 것이 아니기 때문에 어려움. ☞ 깊이가 2 이상인 객체의 깊은 복사는 별도의 방법이 필요함. 「 ① JSON객체 사용 - const 식별자 = JSON.parse(JSON.stri..
JavaScript의 타입 : 느슨한 타입의 동적 언어 ☞ 어떤 특정 타입과 연결되지 않으며, 모든 타입의 값으로 할당 / 재할당 가능 어떤 값들이 있는가 원시값(언어의 최고 로우레벨에서 직접 표현되는 불변 데이터) ① Boolean true / false 값으로 논리 값을 말함. 비교 연산자의 결과값으로 반환되는 값 ※ Boolean 객체 : https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Boolean 「truthy와 falthy」 - truthy : falthy 값을 제외한 모든 값으로 논리값을 기대하는 문맥에서 true로 평가되는 값 - falthy : 0, -0, 0n, "", null, undefined..
스코프 자바스크립트에서 선언된 변수가 존재하는 범위를 이야기함. (전역 스코프 - 렉시컬 스코프) 섀도잉 { ① { ② } } 위와 같이 단락이 나뉘어졌을 때 ①의 렉시컬 스코프와 ②의 렉시컬 스코프가 존재하는데 ②의 렉시컬스코프에서 어떠한 변수를 호출하면 자바스크립트는 ②의 렉시컬 스코프에서 해당 변수를 찾은 뒤에 없으면 ①의 스코프에서 해당 변수를 찾는다. 그렇다면 ①과 ②에서 각각 값이 주어진 변수가 있다면 ②에서 그 변수를 부른다면 당연히 ②의 렉시컬 스코프에서 할당된 값이 불려지게 되는데 이렇게 내부 변수가 위부 변수를 가리는 현상을 섀도잉이라고 한다. 변수의 선언으로 인해 충돌하는 것을 해결하는 방법으로 책에서 제시한 방법은 크게 한가지임. 결국에는 블록 스코프, 즉 나만의 렉시컬 스코프를 만..