2020/03/09
JavaScript에서 변수를 선언하는 방법은 세가지가 있다. 어떤 것들이 있는지 알아보고 그 차이를 알아보려고 한다.
const a = 123;
console.log(a); // 123
a = 456;
console.log(a);
// Uncaught TypeError: Assignment to constant variable.
const a = 789;
// SyntaxError: Identifier 'a' has already been declared
let a = 123;
console.log(a); // 123
a = 456;
console.log(a); // 456
let a = 789;
// SyntaxError: Identifier 'a' has already been declared
var a = 123;
console.log(a); // 123
a = 456;
console.log(a); //456
var a = 'jotang';
console.log(a); // jotang
차이점을 먼저 알아보기 전에 scope에 대해서 먼저 알아보도록 한다.
{}(bracket, 브라켓)
으로 감싸진 범위.block-scope
.function-scope
는 block-scope 중에서 function의 블록이 갖는 범위를 말한다.// const & let
function a() {
for (let i = 0; i < 3; i++) {
console.log(i); // 0, 1, 2
}
console.log(i); // i is not defined
}
a();
function b() {
for (var i = 0; i < 3; i++) {
console.log(i); // 0, 1, 2
}
console.log(i); // 3
}
console.log(i); // i is not defined
b();
JavaScript는 객체지향 개념을 지원하기 위해 prototype을 사용.
JavaScript에서 채택하고 있는 자바의 몇 가지 문법 중 대표적인 것은 new! JavaScript는 es6 이전에는 class 키워드가 없었다. 따라서 es6 이전 JavaScript에서는 function으로 정의했다.
function Person(name, age) {
this.name = name;
this.age = age;
}
const jotang = new Person('jotang', 32);
console.log(jotang.name); // jotang
console.log(jotang.age); // 32
class Person {
constructor(name, age) {
this.name = name;
this.age = age;
}
}
const jotang = new Person('jotang', 32);
console.log(jotang.name); // jotang
console.log(jotang.age); // 32
es6에서는 class 키워드가 추가돼서 클래스를 정의하여 사용할 수 있게 되었다.
class Car {
constructor(name) {
this.name = name;
this.type = 'Car';
}
getName() {
return this.name;
}
}
let car = new Car('BMW');
console.log(car.getName()); // BMW
class Suv extends Car {
constructor(name) {
super(name);
this.type = 'Suv';
}
}
let suv = new SUV('My SUV');
console.log(suv.getName());