[Vue.js] 09 ES6
2021. 9. 24. 09:53ㆍStudy/Vue.js
반응형
개요
- ECMAScript 2015
- Vue.js 코딩을 간편하게 해주는 문법 학습
- const & let
- Arrow Function
- Enhanced Object Literals
- modules
- Spread Operator
- Babel, Can I use
const & let
- ES6에서 사용하는 변수 선언 방식
let
- 한번 선언하면 다시 선언할 수 없다.
// 똑같은 변수를 재선언할 때 오류
let a = 10;
let a = 20; // Uncaught SyntaxError: Identifier 'a' has already been declared
const
- 한번 할당한 값을 변경할 수 없다.
// 값을 다시 할당했을 때 오류
const a = 10;
a = 20; // Uncaught TypeError: Assignment to constant variable.
- 단, 객체 {}또는 배열 []로 선언했을 때는 객체의 속성(property)과 배열의 요소(element)를 변경할 수 있다.
// 객체로 선언하고 속성 값을 변경
const b = {
num: 10,
text: 'hi'
};
console.log(b.num); // 10
b.num = 20;
console.log(b.num); // 20
// 배열로 선언하고 배열 요소를 추가
const c = [];
console.log(c); // []
c.push(10);
console.log(c); // [10]
블록 유효범위
- ES5의 var를 이용한 변수 선언 방식과 let & const를 이용한 변수 선언 방식의 가장 큰 차이점은 블록 유효범위이다.
var의 유효 범위
- var의 유효 범위는 함수의 블록 단위로 제한되며 흔히 함수 스코프(function scope)라고 표현
var a = 100; // window
function print() {
var a = 10; // print()
console.log(a);
}
print(); // 10
for 반복문에서의 var 유효 범위
- var의 유효 범위가 {}에 제한되나?
var a = 10;
for (var a = 0; a < 5; a++) {
console.log(a); // 0 1 2 3 4 5
}
console.log(a); // 6
const와 let의 블록 유효범위
- 반복문의 조건 변수 a를 let으로 선언하니 변수의 유효 범위가 for 반복문의 {} 블록 안으로 제한됨.
var a = 10;
for (let a = 0; a < 5; a++) {
console.log(a); // 0 1 2 3 4 5
}
console.log(a); // 10
화살표 함수(Arrow Function)
- ES6의 새로운 함수 정의 방식입니다.
기존의 함수 정의 방식
기존 자바스크립트의 함수 정의 방식
var a = function() {
// ...
};
화살표 함수 정의 방식
화살표 함수를 이용한 함수 정의 방식
var a = () => {
// ...
};
화살표 함수의 다양한 문법
화살표 함수를 정의하는 방식은 간단한 자바스크립트 표현식부터 {} 를 이용한 선언 방식까지 여러 방법이 있다.
1. 단순한 자바스크립트 표현식
단순한 자바스크립트 표현식의 경우 아래와 같이 간소화 문법을 사용할 수 있다.
() => 10 + 20; // {} 필요 없음
2. 함수 선언 방식
복잡한 자바스크립트 선언문이 들어갈 경우에는 {}를 사용하여 아래와 같이 구현.
() => {
print();
log();
return 10 + 20;
};
3. 전달 인자(parameter)가 하나인 경우
인자를 1개만 선언하는 경우 인자를 받을 때 사용하는 소괄호() 를 생략할 수 있다.
const a = (num) => { return num * 10 };
const b = num => num * 10;
a(10); // 100
b(10); // 100
화살표 함수 this
- 일반함수가 전역 컨텍스트에서 실행될 때 this가 정의
- 화살표함수는 this를 정의하지 않는다.
- 함수의 내부함수, 콜백함수에 사용되는 this는 window이다.
let cat = {
sound: "meow",
soundPlay: function () {
console.log(this) // 가.
setTimeout(function () {
console.log(this) // 나.
console.log(this.sound); // 다.
}, 1000);
}
}
cat.soundPlay();
// 가. cat {sound: "meow", soundPlay: ƒ}
// 나. window
// 다. undefined -----> undefined인 이유는 window에 sound가 없어서
일반함수
// 함수안에 that 변수를 선언하기
let cat = {
sound: "meow",
let that = this // that 사용
soundPlay: function () {
setTimeout(function () {
console.log(that.sound);
}, 1000);
}
}
// bind 사용하기
let cat = {
sound: "meow",
soundPlay: function () {
setTimeout(function () {
console.log(this.sound);
}.bind(this), 1000);
}
}
화살표 함수
let cat = {
sound: "meow",
soundPlay: function () {
setTimeout(() => {
console.log(this.sound);
}, 1000);
}
}
향상된 객체 리터럴(Enhanced Object Literal)
- 자바스크립트에서 사용하던 객체 정의 방식을 개선한 문법
기존 객체 정의 방식
var josh = {
// 속성: 값
language: 'javascript',
coding: function() {
console.log('Hello World');
}
};
축약 문법 1 - 속성과 값이 같으면 1개만 기입
- 객체를 정의할 때 속성(property)와 값(value)이 같으면 아래와 같이 축약이 가능
var language = 'javascript';
var josh = {
// language: language,
language
};
console.log(josh); // {language: "javascript"}
// #1 - 컴포넌트 등록 방식에서의 축약 문법
const myComponent = {
template: '<p>My Component</p>'
};
new Vue({
components: {
// myComponent: myComponent
myComponent
}
});
// #2 - 라우터 등록 방식에서의 축약 문법
const router = new VueRouter({
// ...
});
new Vue({
// router: router,
router
});
축약 문법 2 - 속성에 함수를 정의할 때 function 예약어 생략
const josh = {
// 속성: 함수
coding: function() {
console.log('Hello World');
}
};
josh.coding(); // Hello World
- ES6에서는 아래와 같이 축약하여 코딩하는 것을 추천함.
const josh = {
coding() {
console.log('Hello World');
}
};
josh.coding(); // Hello World
ex)
new Vue({
// ...
methods: {
fetchData: function() {
// ...
},
showAlert: function() {
// ...
}
}
});
new Vue({
// ...
methods: {
fetchData() {
// ...
},
showAlert() {
// ...
}
}
});
modules
- 임포트(Import)와 익스포트(Export)는 자바스크립트의 코드를 모듈화 할 수 있는 기능
- 모듈화란 쉽게 말해서 다른 파일에 있는 자바스크립트의 기능을 특정 파일에서 사용할 수 있는 것.
모듈화의 필요성
- 기본적으로 자바스크립트의 유효 범위는 전역으로 시작하는데 아래와 같이 HTML 페이지를 로딩하면 원하는 결과가 나오지 않는다.
<!-- index.html -->
<body>
<script src="a.js"></script>
<script src="b.js"></script>
<script>
getTotal(); // 200
</script>
</body>
// a.js
var total = 100;
function getTotal() {
return total;
}
// b.js
var total = 200;
import & export 기본 문법
export 변수, 함수
import { 불러올 변수 또는 함수 이름 } from '파일 경로';
import & export 기본 예제
- 변수
// math.js
export var pi = 3.14;
import { 불러올 변수 또는 함수 이름 } from '파일 경로';
- 함수
// math.js
export var pi = 3.14;
export function sum(a, b) {
return a + b;
}
// app.js
import { sum } from './math.js';
sum(10, 20); // 30
스프레드 오퍼레이터(Spread Operator)
- 펼침 연산자
- 스프레드 오퍼레이터는 특정 객체 또는 배열의 값을 다른 객체, 배열로 복제하거나 옮길 때 사용
- 연산자의 모양은 ...
기존 자바스크립트의 객체 복제 방식
기존 자바스크립트 문법으로만 구현하면..
// 객체의 값을 복사하는 경우
var obj = {
a: 10,
b: 20
};
var newObj = {
a: obj.a,
b: obj.b
};
console.log(newObj); // {a: 10, b: 20}
// 배열의 값을 복사하는 경우
var arr = [1,2,3];
var newArr = [arr[0], arr[1], arr[2]];
console.log(newArr); // [1, 2, 3]
스프레드 오퍼레이터 사용법
// obj 객체를 newObj 객체에 복제
var obj = {
a: 10,
b: 20
};
var newObj = {...obj};
console.log(newOjb); // {a: 10, b: 20}
// arr 배열을 newArr 배열에 복제
var arr = [1,2,3];
var newArr = [...arr];
console.log(newArr); // [1, 2, 3]
// 다수 파라미터
function addNums(...nums) {
return nums.reduce((a, b) => a+b, 0);
}
addNums(...arr);
반응형
'Study > Vue.js' 카테고리의 다른 글
[Vue.js] 11 Vuex Helper (0) | 2021.09.24 |
---|---|
[Vue.js] 07 SFC(Single File Component) (0) | 2021.09.24 |
[Vue.js] 05 Template (0) | 2021.09.23 |
[Vue.js] 03 Router (0) | 2021.09.23 |
[Vue.js] 02 Component (0) | 2021.09.23 |