scope, closer
it("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();
expect(age).to.equal(26);
expect(name).to.equal("jimin");
return innerFn;
}
const innerFn = outerFn();
expect(age).to.equal(27);
expect(name).to.equal("jimin");
expect(innerFn()).to.equal(178);
});
화살표함수로 클로져 표현
it("화살표 함수를 이용해 클로저를 표현합니다", function () {
const adder = (x) => {
return (y) => {
return x + y;
};
};
expect(adder(50)(10)).to.eql(60);
const subtractor = (x) => (y) => {
return x - y;
};
expect(subtractor(50)(10)).to.eql(40);
const htmlMaker = (tag) => (textContent) =>
`<${tag}>${textContent}</${tag}>`;
expect(htmlMaker("div")("code states")).to.eql("<div>code states</div>");
const liMaker = htmlMaker("li");
expect(liMaker("1st item")).to.eql("<li>1st item</li>");
expect(liMaker("2nd item")).to.eql("<li>2nd item</li>");
});
데이터타입
it("원시 자료형을 변수에 할당할 경우, 값 자체의 복사가 일어납니다.", function () {
let overTwenty = true;
let allowedToDrink = overTwenty;
overTwenty = false;
expect(overTwenty).to.equal(false);
expect(allowedToDrink).to.equal(true);
let variable = "variable";
let variableCopy = "variableCopy";
variableCopy = variable;
variable = variableCopy;
expect(variable).to.equal("variable");
});
it("원시 자료형 또는 원시 자료형의 데이터를 함수의 전달인자로 전달할 경우, 값 자체의 복사가 일어납니다.", function () {
let currentYear = 2020;
function afterTenYears(year) {
year = year + 10;
}
afterTenYears(currentYear);
expect(currentYear).to.equal(2020);
function afterTenYears2(currentYear) {
currentYear = currentYear + 10;
return currentYear;
}
let after10 = afterTenYears2(currentYear);
expect(currentYear).to.equal(2020);
expect(after10).to.equal(2030);
});