초보 개발자가 중급이 되려면 반드시 이해해야 하는 Scope와 Closure!!
closure 이해하니까 굉장히 매력적이다. 관련된 문제 많이 풀어보고 싶다!
if (1) {
...
}
for(let i = 0; i < 5; i++) {
...
}
{
console.log('Hi!');
}
var
vs let
const
'use strict'
를 사용합니다.function inputName(name) {
let yourName = name;
console.log('외부 함수입니다. 이름을 입력하셨습니다!');
function outputName() {
console.log(name + '님 안녕하세요. 내부 함수, Closure 입니다!');
}
return outputName;
}
let say = inputName('Chan'); // '외부 함수입니다. 이름을 입력하셨습니다!'
say(); // 'Chan님 안녕하세요. 내부 함수, Closure 입니다!'
function rectArea (horizontal) {
let horizonValue = horizontal;
console.log('고정시킬 가로 길이 : ' + horizontal);
function calculation(verticalValue) {
return '사각형의 넓이 : ' + horizonValue * verticalValue;
}
return calculation;
}
let rect = rectArea(50); // '고정시킬 가로 길이 : 50'
rect(10); // 사각형의 넓이 : 500
function add(x, y) {
let oldX = x, oldY = y;
if (oldY === undefined) {
function newYValue(newY) {
return oldX + newY;
}
return newYValue;
} else {
return oldX + oldY;
}
}
...
을 붙여 사용한다.//배열
const arr = [5, 50];
const spreadArr = [0, ...arr, 5, 49]; // [ 0, 5, 50, 5, 49 ]
//객체
const obj1 = { fruit: 'apple', price: 5940 }
const obj1Clone = { ...obj1 }; // { fruit: 'apple', price: 5940 }
const arr = [1, 2, 59, 49, 100, 8];
function print(...restParameter) {
console.log(restParameter); // [ [ 1, 2, 59, 49, 100, 8 ] ]
}
//또는 개별로 분리할 수 있다.
function print2(num1, num2, ...otherNums) {
console.log(`${num1},${num2}, ...${otherNums}`);
} // 1,2, ...3,4,5,6
print2('1', '2', '3', '4', '5', '6');
let sellApples = {
fruit : '사과',
price : 100,
sell : function(count) {
return `${this.fruit} ${count} 개 팔아서 ${this.price * count}원을 얻었습니다!`;
}
}
let revenue = sellApples.sell(50); // 사과 50개를 팔아서 5000원을 얻었습니다!
this
의 값은 함수를 호출한 방법에 의해 결정된다.
또한 엄격 모드와 비엄격 모드에 따라 값이 달라질 수 있다.
함수 내부에서 this의 값은 호출한 방법에 따라 달라질 수 있다.
function func() {
return this;
}
func() === window // true
function func2() {
'use strict';
return this; // undefined
}
func2() === window // false..
in
연산자는 속성이 객체에 존재하면 true를 반환합니다.
const fruitsOrigin = {
'apple' : 'balkan Peninsula',
'banana' : 'asia'
'peach' : 'china'
};
console.log('apple' in fruitsOrigin); // true
console.log('melon' in fruitsOrigin); // false