Item 8

해당 아이템은 전역적인 선언은 신중하게 결정해라는 것을 풀어서 설명했습니다.
협업 시, 어떤 개발자가 전역 변수를 선언하면, 그 사람으로 인해 전역 네임스페이스가 오염될 수 있습니다. 불필요한 결합을 초래하기도 하고요. 하지만 최근에는 module이 지원되기에, 해당 문제는 크게 걱정할 필요는 없을 것 같습니다. 물론, 해당 지식은 알고 있어야 한다고 생각합니다.
아이템 마지막 부분은, 흔히 자주 사용하는 플랫폼에 따른 기능이 있는지 탐색할 때 전역 객체를 사용하라는 팁을 줍니다. 최신 브라우저에서 지원되는 기능을 프로젝트에서 사용한다면, 사용자의 환경에 해당 기능이 지원되는지 여부를 검사하는 로직을 할 수 있다는 것 입니다.

Item 9

지역 변수를 선언하라는 이야기를 주로 다루는 아이템이였습니다. 해당 아이템은 이전 아이템을 보충해서 하는 느낌이라 크게 메모할 건 없어 보입니다. (jslint 언급을 하는 걸 보니, 시대의 흐름이 느껴지네요…)

Item 10

처음 보는 구문이 나왔습니다! with라는 것을 설명하고, “사용하지 마라”는 것을 알려주는 아이템이였습니다.

const user = {
  name: "koo",
};
with (user) {
  console.log(name); // koo
}

with는 위와 같이 객체를 참조할 때, 해당 객체를 여러번 참조할 필요가 없어 코드가 간결해지는 것을 볼 수 있습니다. 하지만, 지역에 선언된 어떤 데이터가 동일한 네임을 사용한다면? 모호한 참조를 발생시킵니다.

const user = {
  name: "koo",
};
const name = "kim";
with (user) {
  console.log(name); // ?
}

물론, 몇몇 개발자 분들은 “koo”라는 출력이 나온다는 것을 알 수 있다! 라고 말씀하실 수는 있습니다. 하지만, 코드는 더 명확한게 좋기에 위와 같은 코드는 좋지 않다고 할 수 있죠.

Item 11

javascript에서 핵심 중 하나인, 클로저의 중요성에 대해서 언급하는 아이템이였습니다. 해당 아이템을 보고, 다시금 해당 개념에 대해 되세겨 봐서 좋은 시간이였습니다.

Item 12

es6 이전에 javascript가 지옥이었던 이유를 느꼈던 아이템이였습니다. 호이스팅에 대한 이야기를 주로 다루었습니다.
물론, es6에서 나온 let과 const도 호이스팅이 되지만, var는 함수 단위 스코프를 가져서 블록 단위 선언에 익숙한 사람들에게는 정말 아찔하다고 생각합니다.

Item 13

블록 스코프의 지역변수를 만들고 싶다면, 즉시 실행함수(IIFE)를 만들어 사용하라는 아이템이였습니다.
물론, let과 const를 이용하면 굳이 이럴 필요가 없습니다.

Item 14

기명 함수를 사용할 때, 주의가 필요하다는 걸 알려주는 아이템이였습니다. ES3 같은 경우, 기명 함수는 Object의 prototype을 상속받는 부분, 외부에서 참조할 수 없다는 것에 대한 주의를 주는 내용이였습니다.

Item 15

블록 안에 함수 선언을 하지마라는 것이 주된 내용이였습니다. 여기서 블록이란 if문, loop문 등이 될 수 있겠습니다. 나름 상상하지 못했던 구현방식이라 참신하기도 했습니다.

Item 16

이전 Item 10에서 봤던, with문과 같이 처음보는 eval이라는 것에 대한 설명이 주된 내용이였습니다. eval은 인자로 받은 문자열을 javascript 코드로 인식하는 함수인데요. 해당 함수는 유용하게 사용할 수 있으나, 호출할 시 스코프를 오염시킬 수 있어 주의가 필요하다는 내용이였습니다. 만약 사용할 것이라면, Item 17에서 이어 설명됩니다.

Item 17

직접적인 eval보다 간접적인 eval을 사용하라는 내용을 설명하고 있는 아이템이였습니다.
직접적으로 eval은 호출된 스코프와 전체 스코프까지 관여하여, 스코프의 오염은 물론, 다른 함수 실행 퍼포먼스에도 영향을 미친다고 설명되어 있습니다. 하지만 간접적인 eval을 사용함으로써, 전체 스코프에만 접근이 됩니다. 그래서 직접 호출보다는 스코프 영역이 좁아진다고 저는 이해를 하며 읽었습니다.

업데이트:

댓글남기기