JavaScriptμμ ES λ?
ECMASCRIPTμ μ½μ΄λ₯Ό λ»νλ©°, μλ°μ€ν¬λ¦½νΈμ νμ€, κ·κ²©μ λνλ΄λ μ©μ΄μ΄λ€.
λͺ¨λ λΈλΌμ°μ μμ λμν μ μλ νμ€νλ μλ°μ€ν¬λ¦½νΈκ° νμν΄μ§λ©΄μ
λΉμ리 νμ€ν κΈ°κ΅¬μΈ ECMA μΈν°λ€μ λμ μλ°μ€ν¬λ¦½νΈμ νμ€νλ₯Ό μμ²νμλ€.
ES5 λ 2009λ λμ HTML5μ ν¨κ» μΆμ°ν νμ€ μ¬μμ΄λ©°,
ES6λ 2015λ μ λ²μ μ μνμ¬ μΆμν λ²μ μ΄λ€.
ES6 μ΄νλ‘λ 맀λ μ λ°μ΄νΈκ° λκ³ μκ³ , μ΄νλ₯Ό 'λͺ¨λ μλ°μ€ν¬λ¦½νΈ'λΌκ³ λΆλ₯Έλ€.
μλμλ ES6μ ν¬ν¨λ
let, const ν€μλ / νμ΄ν ν¨μ / ν΄λμ€ / λͺ¨λ λ€λ£¨κ³ μλ€.
let, const ν€μλ
ES5
ES5μ λ³μ μ μΈ λ°©λ²μ varκ° μ μΌνλ€.
var : μ μΈκ³Ό μ΄κΈ°νκ° λμμ μ€ν
λ¨μ :
ν¨μ λ 벨 μ€μ½ν μ§μ → μ§μλ³μλ₯Ό μ μλ³μλ‘ μ¬μ©λ¨λ°
varν€μλ μλ΅ νμ© → μ묡μ μ μλ³μ μμ°
λ³μ μ€λ³΅ μ μΈ νμ© → λ³μκ°μ μλμΉ μμ λ³κ²½
λ³μ νΈμ΄μ€ν → μ μΈνκΈ° μ΄μ μ μ°Έμ‘°
ES6
var ν€μλμ λ¨μ μ 보μνκΈ°μν΄
letκ³Ό const ν€μλκ° λμ λμλ€.
const : μμ(λ³νμ§ μλ κ°, μ¬ν λΉ x)
let : μ¬ν λΉμ΄ κ°λ₯ν κ°
λΈλ‘ λ 벨 μ€μ½ν → μ§μλ³μ{ } μμ μ¬μ©λ λ³μλ μ½λ λΈλ‘λ΄μμλ§ μ ν¨
λ³μ μ€λ³΅ μ μΈ κΈμ§ → μ€λ³΅ μ μΈμ, λ¬Έλ²μλ¬κ° λ°μ
νΈμ΄μ€ν → λ³μ μ μΈ μ΄μ μλ μ°Έμ‘°ν μ μλ€.
λ³μ μ μΈμλ κΈ°λ³Έμ μΌλ‘ constλ₯Ό μ¬μ©νκ³ ,
letμ μ¬ν λΉμ΄ νμν κ²½μ¨ νμ νμ¬ μ¬μ©νλ κ²μ΄ μ’λ€.
μ μ λ³μ (Global scope)
μ μμμ μ μΈλ λ³μμ΄λ©°, μ΄λμμλ μ§ μ°Έμ‘°ν μ μλ€.
μ§μ λ³μ (Local scope of Function-level scope)
μ§μ(ν¨μ) λ΄μμ μ μΈλ λ³μμ΄λ©°, κ·Έ μ§μκ³Ό κ·Έμ§μμ νλΆμ§μμμλ§ μ°Έμ‘°ν μ μλ€.
ν¨μ λ 벨 μ€μ½ν (Function-level scope)
ν¨μ λ΄μμ μ μΈλ λ³μλ ν¨μ λ΄μμλ§ μ ν¨, ν¨μ μΈλΆμμλ μ°Έμ‘°ν μ μλ€.
μ¦, ν¨μ λ΄λΆμμ μ μΈλ³μλ μ§μλ³μ / ν¨μ μΈλΆμμ μ μΈν λ³μλ μ μ λ³μ
λΈλ‘ λ 벨 μ€μ½ν (Block-level scope)
λͺ¨λ μ½λ λΈλ‘(ν¨μ ifλ¬Έ, forλ¬Έ, whileλ¬Έ, try/catch λ¬Έ λ±)λ΄μμ μ μΈλ λ³μλ μ½λ λΆλ‘ λ΄μμλ§ μ ν¨,
μ½λ λΈλ‘ μΈλΆμμλ
νμ΄ν ν¨μ(Arrow function)μ μ μΈ
νμ΄ν ν¨μλ functionν€μλ λμ (=>)λ₯Ό μ¬μ©νμ¬ ν¨μλ₯Ό μ μΈνλ€.
// 맀κ°λ³μ μ§μ λ°©λ²
() => { ... } // 맀κ°λ³μκ° μμ κ²½μ°
x => { ... } // 맀κ°λ³μκ° ν κ°μΈ κ²½μ°, μκ΄νΈλ₯Ό μλ΅ν μ μλ€.
(x, y) => { ... } // 맀κ°λ³μκ° μ¬λ¬ κ°μΈ κ²½μ°, μκ΄νΈλ₯Ό μλ΅ν μ μλ€.
ES5λ³΄λ€ ES6μ νμ΄ν ν¨μλ μ’λ κ°κ²°νκ² ννλλ€.
// ES5
var pow = function (x) { return x * x; };
console.log(pow(10)); // 100
// ES6
const pow = x => x * x;
console.log(pow(10)); // 100
κΈ°μ‘΄μ ν¨μμ this λ°μΈλ©μ΄ λ€λ₯΄λ©°,
Lexical thisλ₯Ό μ§μνλ―λ‘ μ½λ°±ν¨μλ‘ μ¬μ©νκΈ° νΈλ¦¬νλ€.
(μ΄ λΆλΆμ μΆκ°μ μΌλ‘ 곡λΆκ° νμν κ²κ°λ€.)
ν΄λμ€(Class)
ES5
μμ±μ ν¨μμ νλ‘ν νμ , ν΄λ‘μ λ₯Ό μ¬μ©νμ¬
κ°μ²΄ μ§ν₯ νλ‘κ·Έλλ°μ ꡬννμλ€.
// ES5
var Person = (function () {
// Constructor
function Person(name) {
this._name = name;
}
// public method
Person.prototype.sayHi = function () {
console.log('Hi! ' + this._name);
};
// return constructor
return Person;
}());
var me = new Person('Lee');
me.sayHi(); // Hi! Lee.
console.log(me instanceof Person); // true
ES6
κΈ°μ‘΄ λ°©μλ³΄λ€ λ¨μλͺ λ£ν μλ‘μ΄ λ¬Έλ²μΌλ‘ Classν¨μκ° μΆκ° λμλ€.
// ν΄λμ€ μ μΈλ¬Έ
class Person {
// constructor(μμ±μ)
constructor(name) {
this._name = name;
}
sayHi() {
console.log(`Hi! ${this._name}`);
}
}
// μΈμ€ν΄μ€ μμ±
const me = new Person('Lee');
me.sayHi(); // Hi! Lee
console.log(me instanceof Person); // true
(λν μΌν λ΄μ©μ μΆκ° 곡λΆκ° νμν κ²κ°λ€.)
λͺ¨λ (Module)
λͺ¨λμ μ ν리μΌμ΄μ μ ꡬμ±νλ κ°λ³μ μμλ‘μ μ¬μ¬μ©μ΄ κ°λ₯ν μ½λ μ‘°κ°μ λ§νλ€.
λͺ¨λμ μΈλΆ μ¬νμ μΊ‘μννκ³ κ³΅κ°κ° νμν APIλ§μ μΈλΆμ λ ΈμΆνλ€.
λͺ¨λμ νμΌλ¨μλ‘ λΆλ¦¬λμ΄ μμΌλ©° νμμ λ°λΌ λͺ¨λμ λ‘λνμ¬ μ¬μ¬μ©νλ€.
script νκ·Έμ type="module" μ μΆκ°νλ©΄ λͺ¨λλ‘μ λμνλ€.
ES6 λͺ¨λμ νμΌ νμ₯μλ λͺ¨λμμ λͺ ννκΈ° μν΄ mjsλ₯Ό μ¬μ©νλλ‘ κΆμ₯νλ€.
<script type="module" src="lib.mjs"></script>
<script type="module" src="app.mjs"></script>
λͺ¨λμ λͺ¨λ μ€μ½νλ₯Ό κ°μ§λ€.
λͺ¨λ λ΄μμ var ν€μλλ‘ μ μΈν λ³μλ λμ΄μ μ μ λ³μκ° μλλ©°
window κ°μ²΄ νλ‘νΌλλ μλλ€.
// foo.mjs
var x = 'foo';
console.log(x); // foo
// λ³μ xλ μ μ λ³μκ° μλλ©° window κ°μ²΄μ νλ‘νΌν°λ μλλ€.
console.log(window.x); // undefined
// bar.mjs
// λ³μ xλ foo.mjsμμ μ μΈν λ³μ xμ μ€μ½νκ° λ€λ₯Έ λ³μμ΄λ€.
var x = 'bar';
console.log(x); // bar
// λ³μ xλ μ μ λ³μκ° μλλ©° window κ°μ²΄μ νλ‘νΌν°λ μλλ€.
console.log(window.x); // undefined
<!DOCTYPE html>
<html>
<body>
<script type="module" src="foo.mjs"></script>
<script type="module" src="bar.mjs"></script>
</body>
</html>
Export: μΈλΆμ 곡κ°νμ¬ λ€λ₯Έ λͺ¨λλ€μ΄ μ°Έμ‘°ν μ μκ²νλ€.
// lib.mjs
const pi = Math.PI;
function square(x) {
return x * x;
}
class Person {
constructor(name) {
this.name = name;
}
}
// λ³μ, ν¨μ ν΄λμ€λ₯Ό νλμ κ°μ²΄λ‘ ꡬμ±νμ¬ κ³΅κ°
export { pi, square, Person };
Import: λͺ¨λμμ 곡κ°ν (export)ν λμμ λ‘λνλ €λ©΄ import ν€μλλ₯Ό μ¬μ©νλ€.
μλμ import 3κ°μ§ λ°©μμ μ°Έκ³ ν μ μλ€.
// app.mjs
// κ°μ ν΄λ λ΄μ lib.mjs λͺ¨λμ λ‘λ.
// lib.mjs λͺ¨λμ΄ exportν μλ³μλ‘ importνλ€.
// ES6 λͺ¨λμ νμΌ νμ₯μλ₯Ό μλ΅ν μ μλ€.
import { pi, square, Person } from './lib.mjs'; // import 첫λ²μ§Έ λ°©μ
import * as lib from './lib.mjs'; // import λλ²μ§Έ λ°©μ
import { pi as PI, square as sq, Person as P } from './lib.mjs'; // import μΈλ²μ§Έ λ°©μ
console.log(pi); // 3.141592653589793
console.log(square(10)); // 100
console.log(new Person('Lee')); // Person { name: 'Lee' }
<μ°Έκ³ μ©>
lib.mjs / app.mjs / html μμ importμ export λμ μ¬μ©λ°©λ²
// lib.mjs
export default x => x * x;
// app.mjs
// λΈλΌμ°μ νκ²½μμλ λͺ¨λμ νμΌ νμ₯μλ₯Ό μλ΅ν μ μλ€.
// λͺ¨λμ νμΌ νμ₯μλ .mjsλ₯Ό κΆμ₯νλ€.
import square from './lib.mjs';
console.log(square(10)); // 100
<!DOCTYPE html>
<html>
<body>
<script type="module" src="./lib.js"></script>
<script type="module" src="./app.js"></script>
</body>
</html>
'κ°λ° μ΄μΌκΈ° > νν΄99' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[νν΄99] 5μ£Όμ°¨ - ORM(Object Relational Mapping)μ΄λ? (0) | 2022.04.03 |
---|---|
[νν΄99] 4μ£Όμ°¨ - package.jsonμ΄λ? (0) | 2022.03.27 |
[νν΄99] 2μ£Όμ°¨ - JWT(JSON Web Token)λ? (0) | 2022.03.13 |
[νν΄99] μμ μ μ¬μ μμ - 5μ£Όμ°¨: AWSμλ²μ°κ²°, Gitbash, κ°λΉμ λλ©μΈμ°κ²° (0) | 2022.02.10 |
[νν΄99] μμ μ μ¬μ μμ - 4μ£Όμ°¨: flask, ν¬λ‘€λ§, DBμ°κ²° (0) | 2022.02.09 |