중간 퀴즈 1 풀이

1. 자바스크립트 언어의 데이터 타입의 기본형은 00성을 가진다

-> 불변 (변할 수 없는 성질)

 

2. 자바스크립트 언어는 데이터 타입을 000에 결정한다

-> 런타임

 

3. 

let a = null;
let b;
console.log(a == b);

// true

 

📍풀이

a : null (빈 값)

b : undefined (정의 되지 않음)

 

"==" 과 "===" 차이

"=="은 값만 평가한다

"==="은 값과 type 둘을 동시에 평가한다. 

 

a == b -> 둘 다 값이 없음 -> True

a === b -> 둘 다 값이 없지만 type이 서로 다름 -> False


4. 

let a = 5;
let b = a;
let o1 = { a: b };
let o2 = o1;
a = 1;
o2.a = 3;
console.log(a + b + o1.a + o2.a);

// 12

 

📍풀이


5. 

// 전역 스코프
var a = -1;
let b = 2;

function f() { // 함수 스코프
  var a = 3;
  let b = 4;
  
  { // 블록 스코프
    var a = 5;
    let b = 6;
  }
  
  console.log(a + b);
}

f();

// 9

📍풀이

var는 값이 업데이트 될떄마다 계속 업데이트 된다

let은 블록 스코프에서만 유지됨. -> 외부로 나오면 블록스코프에서 선언한 값은 사라진다. 

console.log (a+b)가 블록 스코프 밖에 있기 때문에 let b = 6; 유효하지 않게 된다. 

 

결국 

a = 5 (블록 스코프 값)

b = 4 (함수 스코프 값) 

 

6. 

let a = 1;
function f1() {
  let a = 3;
  return f2();
}
function f2() {
  return a;
}
console.log(f1());

// 1

📍풀이

a = 1인 상태에서  f1( )을 실행했다. a = 3을 선언하였고, f2( )를 호출했다. f2( ) 실행 시 함수 내부에 내부 스코프가 없으므로 가장 가까운 a인 전역변수 a를 받게 된다. 

 

그렇다면 만약 f2( )에 변수가 선언 되어있다면? 해당 변수의 값이 답이 된다. 

예시


7. 

var a = 1;

function f1() {
  return 3;
}

var f2 = function () {
  return 5;
};

console.log(a + f1() + f2());
var a = 2;

function f1() {
  return 4;
}

var f2 = function () {
  return 6;
};

// 10

📍풀이

전역변수 a = 1

function f1( ) -> 3

var f2 -> function() 실행 -> 5

function f1() -> 4

 

1 + 4 + 5 = 10

 

8. 

var a = 1;
global.a = 3;
const obj = {
  a: 5,
  f: function () {
    return this.a;
  },
};
let f = obj.f;
console.log(f());

// 3

📍풀이

전역 스코프에서 var a =1 로 선언하였다. 하지만 global.a = 3이기 때문에 전역 객체 global의 속성 a =3이 새로 생긴 것이다. 우선순위로 봤을때 global.a 가 위에 있다. 

 

const obj를 선언한다. (const는 상수로 한 번 지정된 값은 변하지 않는다.)

obj.a는 5이다.

obj.f는 this.a값인데, function( )안에 내부 스코프가 없기 때문에 가장 가까운 global.a값이 반환된다. 

 

let f = obj.f = global.a -> 3이 된다. 


9. 

global.a = 1;
const obj = {
  a: 2,
};
function f1(a, b, c) {
  return this.a + b + c;
}
const f2 = f1.bind(obj, 3, 5, 7);
console.log(f2(4, 6, 8));

// 14

📍풀이

 

10. 

const arr = [1, 2, 3];
const r = arr.map((e) => e - 1).reduce((acc, e, i) => (acc += e * i));
console.log(r);

// 5

📍풀이

a