var로 선언한 변수
var를 사용했을 때 문제점
var를 지양하는 방법
// var의 경우, 중복 선언 가능
var name = '이름1';
var name = '이름1';
// var의 경우, 재할당 가능
name = '이름2';
// let의 경우, 중복 선언 불가능
let name = '이름1';
let name = '이름1'; // Error
// let의 경우, 재할당 가능
name = '이름2';
// const의 경우, 중복 선언 불가능
const name = '이름1';
const name = '이름1'; // Error
// const의 경우, 재할당 불가능
name = '이름2'; // Error
전역 공간 (최상위 공간)
전역 공간 사용시 문제점
전역 공간 사용을 최소화하는 방법
// 전역 공간은 어디서나 접근, 변경 가능함
// foo.js
var num = 1;
// bar.js
var num = 2;
// foo => bar => devTool
console.log(num); // 2
console.log(window.num); // 2
// 전역 공간의 Web API를 JavaScript로 수정할 수 있음
// foo.js
var setTimeout = 'setTimeout'
// bar.js
setTimeout(() => {
// setTimeout API가 실행되지 않음
console.log('setTimeout');
}, 1000);
임시 변수
임시 변수의 문제점
임시 변수를 제거하는 방법
// Bad
// 임시 변수 result를 조작할 수 있음
function getElements() {
const result = {};
result.title = document.querySelector('.title');
result.text = document.querySelector('.text');
result.value = document.querySelector('.value');
return result;
}
// Good
// 조작할 수 없게 값을 바로 반환함
function getElements() {
return {
title: document.querySelector('.title'),
text: document.querySelector('.text'),
value: document.querySelector('.value')
};
}
// Bad
// let으로 선언한 변수는 조작할 가능성이 있음
function getDateTime(targetDate) {
let month = targetDate.getMonth();
let day = targetDate.getDate();
let hour = targetDate.Hour();
month = month >= 10 ? month : '0' + month;
day = day >= 10 ? day : '0' + day;
hour = hour >= 10 ? hour : '0' + hour;
return {
month, day, hour
}
}
// Good
// const로 변수들을 선언함
// 조작할 수 없게 값을 바로 반환함
function getDateTime(targetDate) {
const month = targetDate.getMonth();
const day = targetDate.getDate();
const hour = targetDate.Hour();
return {
month: month >= 10 ? month : '0' + month,
day: day >= 10 ? day : '0' + day,
hour: hour >= 10 ? hour : '0' + hour
}
}
// 월, 일, 시간 뒤에 단위를 붙이는 요구사항의 경우
function getDateTimeWithUnit() {
const currentDateTime = getDateTime(new Date());
return {
month: currentDateTime.month + '달',
day: currentDateTime.day + '일',
hour: currentDateTime.hour + '시',
}
}
호이스팅
호이스팅의 문제점
호이스팅 주의 방법
// 변수 호이스팅
var global = 0;
function outer() {
// var로 선언된 global 변수는 최상단으로 끌어올려짐
// 이 시점에서 global 변수는 선언만 된 상태임
console.log(outer); // undefined
var global = 5;
function inner() {
var global = 10;
console.log(global); // 10
}
inner();
global = 1;
console.log(global); // 1
}
outer();
// 함수 호이스팅
console.log(sum()); // 10
function sum() {
return 1 + 2;
}
function sum() {
return 1 + 2 + 3;
}
function sum() {
return 1 + 2 + 3 + 4;
}