Level 2-2. JavaScript 핵심 개념

soheey·2021년 5월 25일
0

Scope - 1

6-1. Scope
let greeting = 'Hello';
function greetSomeone() {
  let firstName = 'Josh';
  return greeting + ' ' + firstName;
}

greetSomeone(); // => ???
firstName; // => ???

정답: 'Hello Josh' / 에러 발생

Scope - 2

6-2. Scope
let name = "Richard";

function showName() {
  let name = "Jack"; // 지역 변수
  // showName 함수 안에서만 접근 가능
  console.log(name); // ???
}

console.log(name); // ???
showName();
console.log(name); // ???

정답: Richard / Jack / Richard

Scope - 3

6-3. Scope
let name = "Richard";

function showName() {
  name = "Jack"; // 전역 변수
  // 선언(let)이 없기 때문에, 바깥 scope에 있는 name이라는 변수를 가져옵니다
  console.log(name); // ???
}

console.log(name); // ??? ①
showName(); ②
console.log(name); // ??? ③

정답: Richard / Jack / Jack 

① name = "Jack";는 전역 변수이기 때문에, showName();이 실행되기 전에는 let name = "Richard";을 가져다 쓰지만
② showName();안에서 name을 새롭게 "Jack"으로 할당
③ 새롭게 할당한 변수는 바깥쪽에 있는 let name = "Richard";과도 같기 떄문에 name = "Jack";

Scope - 4

6-4. Scope
for(let i=0; i<5; i++) {
  console.log(i); // 다섯번 iteration
}
console.log('final i:', i); // ?

정답:ReferenceError

Scope - 5

6-5. Scope
for(var i=0; i<5; i++) {
  console.log(i); // 다섯번 iteration
}
console.log('final i:', i); // ?

정답: 5

Scope - 6

BUT 재선언 관련 에러 메시지는 Chrome 80 버전 이후부터는 표시되지 않습니다. 하지만, 기타 브라우저에서는 에러를 내며 본질적인 작동 원리는 달라지지 않습니다.

전역 범위는 최상위 스코프이기 때문에 어떤 라이브러리(프로그램)이 어떤 변수를 사용할지 모름.

선언 키워드가 없어도 에러를 내지 않으며, 전역 변수로 취급하기 때문에.

use strict는 개발자 콘솔이 아닌 저장된 상태에서만 사용 가능.

Closure

커링은 함수를 생성하는 함수.

return부분은 (키값이 함수인) 객체와 같다고 보면 됨.
counter1은 함수가 담겨있는 객체, 메소드처럼 이용할 수 있음.
privateCounter는 바깥에서 접근X, 함수로 간접적 접근만 가능.

type을 바꾸지 못하게 하기 위해 클로저 모듈 패턴 사용.

재사용성↑, 독립성↑

객체지향 JavaScript

class는 대문자와 일반명사로!

Constructor(생성자) 함수는 return값을 만들지 않는다!

arr은 instance, class는 Array

매개변수

0개의 댓글