-
Notifications
You must be signed in to change notification settings - Fork 13
자바스크립트의 물방울
개발자가 다른 언어에서 오는 문제를 해결하는 데는 많은 문제가 있지만 변수 범위 지정이 가장 좋습니다.
근본적인 문제는 많은 기대 변수가 특정 블록(예 : for 루프)으로 범위가 지정되지만
var로 선언된 자바스크립트 변수는 가장 가까운 부모 함수로 범위가 지정된다는 것입니다.
먼저 이것이 잘못 될 수 있는 방법을 살펴보자
var avatar = "Ang";
var element = "Air";
var elements = [
"Air",
"Earth",
"Fire",
"Water"
];
for (var i = 0; i < elements.length; i++) {
var element = elements[i];
console.log(avatar + " has mastered " + element);
}
// Outputs: "Ang's primary element is Water"
console.log(avatar + "'s primary element is " + element);
블록 범위 지정을 사용하는 언어에 익숙한 개발자는 위의 코드에
아무런 문제가 없으며 실제 결과 대신 "Ang(?) 의 기본 요소는 공기 " 라고 예상한다.
이 문제는 일단 알게되면 쉽게 피할 수 있다.
블록 내에서 변수 선언을 피하면 혼동을 피할 수 있다.
그러나 자바스크립트에서 블록 범위 지정을 사용하고 싶다고 가정 해 보자.
우리는 그것에 대해 어떻게 이야기 할건가?
우리는 이렇게 할 수 있다.
var avatar = "Ang";
var element = "Air";
var elements = [
"Air",
"Earth",
"Fire",
"Water"
];
for (var i = 0; i < elements.length; i++) {
(function() {
var element = elements[i];
console.log(avatar + " has mastered " + element);
})();
}
// Outputs: "Ang's primary element is Air"
console.log(avatar + "'s primary element is " + element);
이 솔루션은 IIFE를 사용하여 블록 범위 지정을 에률레이트한다.
함수는 자바스크립트의 범위 지정 매커니즘이므로 루프를 통과 할 때마다
새로운 함수를 정의하고 즉시 호출하므로 블록 범위의 동작을 근사화한다.
이것은 관용적인 자바스크립트는 아니지만, 얼마나 유연한 자바스크립트가 될 수 있는지에 대한 아이디어를 제공한다.
또한 ECMA Script6 사양의 초안에는 블록 범위 변수를 정의하는데 사용되는 let 키워드가 포함되어 있다.
이 키워드를 사용하고 싶다면 FireFox에서 사용할 수 있다.
일부 의역이 들어간 경우도 있으므로 해당 원문의 내용과 조금 다를 수 있습니다.
문제가 될 소지가 있다거나 혹은 수정이 필요한 사항이 있다면 있다면 issues 보내주세요.
기술문서
- 호출스택
- 원시자료형
- 값타입과 참조타입
- 명시적 변환, 암시적 변환, Nominal, 구조화, 덕 타이핑
- == vs === vs typeof
- 함수 범위, 블록 범위, 렉시컬(lexical) 범위
- 식(expression) vs 문(statement)
- IIFF, Modules, Namespaces
- 메세지큐와 이벤트루프
- setTimeout, setInterval, requestAnimationFrame
- 자바스크립트 엔진
- 비트 연산자, 형식화 배열, 버퍼(배열)
- DOM과 Layout Trees
- 팩토리와 클래스
- this, call, apply, bind
- new, 생성자, instanceof, 인스턴스
- 프로토타입의 상속과 체인
- Object.create와 Object.assign
- map, reduce, filter
- 순수함수, 부수효과, 상태변이
- Closure
- 고차함수
- 재귀
- 컬렉션과 생성기
- Promise
- async, await
- 자료구조
- 함수 성능과 빅 오 표기법
- 알고리즘
- 상속, 다형성, 코드의 재사용성
- 설계패턴
- 부분 어플리케이션, 커링, Compose, Pipe
- 클린코드