식별자
- 반드시! 문자, 달러, 또는 밑줄로 시작해야한다. 그 이후는 숫자도 가능하다.
- 대소문자를 구분하며, 클래스명 외에는 모두 대문자로 시작하지 않는다.
- 예약어 사용 불가 (const, class, function 등)
let dog
let vairableName
const cats = []
const rDesc = /.*/
function myFunc() {}
function onClick() {}
function onKeyDown() {}
let isReady = false
class User {
constructor(options) {
this.name = options.name
}
}
const person = new User({
name:'홍길동'
})
절대 변하지 않을 경우는 스네이크케이스를 사용한다.
const API_KEY = 'dsknfaliwjt32012bhg...'
let, const, var, 전역스코프 함수스코프 & 블록스코프
let x = 1
x =3
let y
y = 3
// 다음의 경우 이미 선언되었다는 에러가 뜬다
let x = 3
const seven = 7
//에러발생
seven = 10
const constNum = [1,2]
constNum.push(5)
// [1,2,5]
//다음의 경우 불가능
const noValue
noValue = 10
let scopeX = 1
if (scopedX ===1 ) {
let scopedX = 5
console.log(scopedX) = 5
}
console.log(scopedX) // 5,1
var num = 1
var num = 2
var functionScopedX = 1
let blockScopedX = 1
if (functionScopedX === 1) {
var functionScopedX = 100
let blockScopedX = 200
console.log(functionScopedX) //100
console.log(blockScopedX) //200
}
console.log(functionScopedX) //100
console.log(blockScopedX) //1
var로 선언된 변수는 "선언이전"에 참조될 수 있다.
마치 변수가 위로 끌어올려지는(hoisted)것처럼 보여서 호이스팅이라한다.
console.log(myName)
var myName = 'sj' //undefined 라는 게 뜬다. 이것은 에러가 아니다.
// - 이런 식으로 선언이 호이스팅 된다.
var myName
console.log(myName)
myName = 'sj'
// - let도 호이스팅이 일어나지만 에러가 뜬다
console.log(letName)
let letName = 'sj' //에러
var
let & const
결론
var의 특성과 hoisting의 개념을 알아두자.
각 키워드의 특성과 스코프의 차이를 정확히 알아두자.
전역이며 글로벌객체 == window객체.
브라우저 상에서 JS를 사용할 때 전역 변수 (or 객체)를 관장하는 객체.
단, 개발할 때 전역 변수는 가능하면 지양하자