JavaScript Koans

김윤혜·2022년 11월 8일
0
  1. Types(1)
1 + '1' // '11'
123 - '1' // 122
1 + true // 2
'1' + true // '1true'
  • 문자열 + 숫자 // 문자열로 묶임
  • 숫자 - 문자열 = 사칙연산 가능(+ 제외)
  • 숫자 + true = 숫자 + 1
  • 문자열 + true = '문자열true'

  1. 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);
  });
});
  • innerFn / innerFn() 구분
  • const innerFn = outerFn(); // 변수 innerFn에 outerFn의 호출값인 innerFn을 할당한다. 이 코드가 필요한 이유가 뭘까?

// 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

profile
본질에는 일치를, 비본질에는 관용을, 이 모든 것에 사랑을

0개의 댓글