이번 주에는 Number/Math Methods, 변수의 전달, Scope에 대해 배웠다.

0813 화요일

1. Number Methods

  • Number.isInteger: 정수인지, 아닌지의 여부를 검사한다.
    Number.isInteger(3); // true : 숫자가 반드시 정수일 때만 true를 반환한다.
    Number.isInteger('a'); // false
    Number.isInteger(0.1); // false
  • parselnt/parseFloat: parseInt는 받은 argument를 정수로 형변환하고, parseFloat는 받은 argument를 소수점 숫자를 포함한 채 형변환하여 반환한다.
    parseInt("365"); // 365
    parseInt("365.17"); // 365
    parseInt("Hello"); // NaN
    parseFloat("365.17") // 365.17
  • num.toFixed: 해당 숫자의 소수점 자리만큼 반환한다.
    let numObj = 123.4517;
    numObj.toFixed(); // 123
    numObj.toFixed(1); // 123.5 : 반올림한다.
    numObj.toFixed(2); // 123.45
    numObj.toFixed(3); // 123.452
    numObj.toFixed(6); // 123.451700 : 빈 공간은 0으로 채운다.

2. Math Methods

  • Math.min/Math.max: Math.min은 주어진 arguments 중 가장 작은 값을, Math.max는 가장 큰 값을 반환한다.
    Math.min(-999, 30, -1111, 23424); // -1111
    Math.max(-999, 30, -1111, 23424); // 23424
    Math.min("Hello", "World"); // NaN
  • Math.floor/ Math.round: Math.floor는 주어진 숫자의 내림 값을, Math.round는 반올림 값을 반환한다.
    Math.floor(34.6); // 34
    Math.floor(-24.1); // -25
    Math.round(34.6); // 35
    Math.round(-24.1); // -24
  • Math.random( ): 0과 1 사이의 난수를 반환한다.
    Math.random(); // 0.19523109930025995
    Math.random(); // 0.43241790030880645
    Math.random(); // 0.7805427432556524

< LEARN YOURSELF >

  • Math.abs: 절댓값을 반환한다.
    Math.abs(-24); // 24
    Math.abs(7-199); // 192
    Math.abs(0); // 0
    Math.abs(33); // 33
  • sqrt/pow: 양의 제곱근을 반환한다.
    Math.sqrt(25); // 5
    Math.sqrt(144); // 12
    Math.sqrt(16 * 4); // 8

3. 변수의 전달

  • pass by value(값을 복사해서 넘김)

    let a = 13;
    let b = a;
    b = 37;
    console.log(a) // 13

    --> 원본은 변하지 않고, 복사본만 변한다. (문자열/ 숫자/ 불리언의 경우에 해당)

  • pass by reference(주소값을 복사해서 넘김)

    let a = { c: 13 };
    let b = a;
    b.c = 37;
    console.log(a) // { c: 37 }

    --> 주소값을 복사했으므로, 원본도 변한다. (객체/ 배열/ 함수의 경우에만 해당)

0815 목요일

4. Scope

  • Local Scope vs Global Scope

    let greeting = 'Hello';                   
    function greetSomeone() {
      let firstName = 'Minju';
       return greeting + ' ' + firstName;
    } 
    greetSomeone(); // => "Hello Minju"
    firstName; // => ReferenceError

    greetSomeone 함수가 정의된 범위는 Local Scope, 해당 함수를 포함한 전체 범위는 Global Scope이다.
    여기서 주의할 점은 안쪽에 위치하는 Local Scope에서 바깥 변수/함수를 참조할 수는 있지만, 바깥쪽에 위치하는 Global Scope에서 안쪽 변수/함수를 참조하는 것은 불가능하다는 것이다.

  • Function Scope vs Block Scope

    • let 키워드: Block 단위의 Scope를 가진다.
      for (let i = 0; i < 5; i++) {
      console.log(i) // 0, 1, 2, 3, 4
      } 
      console.log('final i:', i); // ReferenceError
    • var 키워드: 함수 단위의 Scope를 가진다.
      for (var i = 0; i < 5; i++) {
      console.log(i); // 0, 1, 2, 3, 4
      }
      console.log('final i:', i); // final i: 5
    • const 키워드: 값이 변하지 않는 변수, 즉 상수를 정의할 때 사용하는 키워드이다(Block 단위의 Scope).
      const pi = 3.14;
      pi = 3.1415; // TypeError

정리

let const var
유효 범위 Block Scope Block Scope Function Scope
재정의 가능 불가능
재선언 불가능 불가능 가능

마무리

4주차에는 Number/Math Methods, 변수의 전달, Scope에 대해 알아보는 시간을 가졌다.
평소에 코플릿 문제를 풀면서 let을 통해 선언해준 값을 어느 위치에 놓느냐에 따라 문제의 통과 여부가 달라지는 것을 보고,'왜 이러는 거지?' 라는 생각을 했었는데 이번 주차 강의를 듣고 그 동안의 의문점이 많이 해결되었다.

첫주차에는 막막하기만 했던 Pre Course 과정도 벌써 5주차를 향해 달려가고 있다. 차근차근 하나씩 주어진 과제들을 성실히 해내서 Pre Course를 꼭 수료할 수 있도록 힘내자!!!