//1. Use strict
//added in ES 5
//use this for valina Javascript.
'use strict';
JavaScript를 사용할때 맨 위에 'use strict'를 적어주는 것이 좋다. TypeScript말고 vanill Scipt를 사용할때 필요한 것으로 JavaScript는 유연한 언어라 사용하기엔 편하지만 그만큼 위험하다. ECMAScript5부터 추가 되었다.
a = 6;
선언되지 않은 a라는 변수의 값을 할당하면 브라우저에서는 문제가 되지 않는데
'use strict';
a = 6;
'use strict'를 사용하게 되면 a가 정의되어 있지 않다고 에러가 난다.
'use strict';
let a;
a = 6;
a를 정의해주면 에러가 사라진다.
이처럼 vanilla JavaScript로 개발할때엔 파일 맨위에 'use strict'를 선언해주면서 strict모드로 개발하는 것을 추천한다. 상식적인 범위안에서 이용할 수 있고 JavaScript 엔진이 좀 더 효율적으로 빠르게 분석할 수 있다.
// 2. Variable, rw(read/write)
// let (added in ES6)
let name= 'ellie';
console. log(name);
name= 'hello';
console.log(name);
변수는 변경할 수 있는 값으로 변수를 추가할때는 let을 사용한다. let을 사용하여 name이라는 변수를 선언하였고 'ellie'라는 값을 할당하게 되면 'ellie'가 출력이 된다. 그리고 name이라는 변수에 'hello'라는 값을 할당하게 되면 'hello'로 변경되어 출력이 된다.
{
let name= 'ellie';
console. log(name);
name= 'hello';
console.log(name);
}
console.log(name);
block scope는 블럭를 이용해서 코드를 블럭 안에서 작성하게 되면 블럭 밖에서는 블럭 안에 있는 내용을 볼 수가 없다.
하지만 블럭을 쓰지 않고 파일 안에다가 바로 정의해서 사용하는 변수들을 'global scope'이라고 하는데 어느곳에서나 접근이 가능하다.
let globalName = 'global name';
{
let name= 'ellie';
console. log(name);
name= 'hello';
console.log(name);
console.log(globalName);
}
console.log(name);
console.log(globalName);
글로벌한 변수들은 어플리케이션이 실행하여 끝날때까지 메모리에 탑재되어 있기 때문에 최소한으로 사용하는 것이 좋다.
var을 쓰면 안되는 이유...
첫번째, 선언하기도 전에 값을 할당할 수 있다.
대부분의 프로그래밍 언어에서는 선언을 하고 값을 할당한다. 하지만 var에서는
console.log(age);
age = 4;
var age;
이것처럼 선언하기도 전에 값을 할당할 수가 있다. 선언을 하고 값을 할당하는 것이 정상적이다. 이런 것을 var hoisting이라고 하는데 어디에 선언했느냐 상관없이 항상 선언을 제일 위로 끌어올려주는 것을 말한다.
두번째, 'block scope'를 무시한다.
{
age = 4;
var age;
}
console.log(age);
이것처럼 var는 블럭과 관계없이 출력이 되기 때문에 쉽게 코딩을 할 수는 있지만 선언하지도 않는 값들이 할당되어 출력되게 된다.
// 3. Constant(read only/Immutable)
// use const whenever possible.
// only use let if variable needs to change.
// favor immutable data type always for a few reasons;
// -security
// -thread safety
// -reduce human mistakes
const daysInWeek= 7;
const maxNumber= 5;
변수의 값이 변하지 않으면 const를 사용한다.