- Types(1)
1 + '1' // '11'
123 - '1' // 122
1 + true // 2
'1' + true // '1true'
- Scope
// 자바스크립트 함수 호이스팅(hoisting)
funcEx = function () {
return 'function expression';
};
const funcCon = { func: funcEx };
funcCont.func() // 'function expression';
** 질문
1) funcEx는 함수 표현식 같은데 왜 선언하지 않는가.
2) funcCon의 func은 키인데 왜 밑줄에서 함수, 혹은 메소드인 척 호출이 가능한가.
// lexical scope와 closure
function () {
let age = 27;
let name = 'jin';
let height = 179;
function outerFn() {
let age = 24;
name = 'jimin';
let height = 178;
function innerFn() {
age = 26;
let name = 'suga';
return height;
}
innerFn(); // age = 26; let name = 'suga' 178;
expect(age).to.equal(26);
expect(name).to.equal('jimin');
return innerFn; // { age = 26; let name = 'suga'; return height;}
}
const innerFn = outerFn();
// innerFn 변수에 outerFn() 호출값을 할당한다. => 밖에서도 innerfn을 접근가능.
expect(age).to.equal(27);
expect(name).to.equal('jimin');
expect(innerFn()).to.equal(178);
});
});
// default parameter
1) function () {
function defaultParameter(num = 5) {
return num;
}
defaultParameter() // 5;
defaultParameter(10) // 10;
2) function pushNum(num, arr = []) {
arr.push(num);
return arr;
}
pushNum(10) // [10];
pushNum(4, [1, 2, 3] // [1, 2, 3, 4]);
파라미터에 디폴트로 주어진 num=5, arr = []. 파라미터에 undefined이거나 변수가 2개 이상일 때 그중 전달인자가 주어지지 않은 경우, 파라미터의 디폴트 값으로 함수가 진행되는 것 같다.
undefined 정리
const obj = { x: 1 };
delete obj.x;
obj.x // undefined;
객체 : 인덱스_undefined 렝스_undefined
오브젝트 30줄
expect('mastermind' in megalomaniac) = 키로 'mastermind' 안에 있니?
오브젝트 5번문제. Object.assign();
? 88 ~ 98