자바스크립트 Strict Mode, 함수 선언식과 표현식, 화살표 함수

Strict Mode

'use strict';

let hasDriversLicense = false;
const passTest = true;

if (passTest) hasDriverLicense = true;
if (hasDriversLicense) console.log('I can drive');
  • 코드 맨 앞에 'use strict';를 사용해서 적용
  • 버그를 방지하여 조금 더 안전한 코드를 작성할 수 있는 모드이다.
  • 실행시 발생하는 에러 메시지로 ReferenceError, 예약어 사용 등으로 인한 SyntaxError를 빨리 캐치할 수 있다.

함수(Functions)

함수 선언식(Function Declarations)

function logger() {
  console.log('My name is Jonas');
}

// calling / running / invoking function
logger();

const appleJuice = fruitProcessor(5, 0); // 선언되기 이전에도 콜링할 수 있음

function fruitProcessor(apples, oranges) {
  console.log(apples, oranges);
  const juice = `Juice with ${apples} apples and ${oranges} oranges`;
  return juice;
}

console.log(appleJuice);
console.log(fruitProcessor(5, 0));
  • 특이하게도 함수 선언식으로 선언된 함수는 선언되기 이전에도 사용할 수 있다.

함수 표현식(Functions Expressions)

// Function declaration
function calcAge1(birthYear) {
  return 2037 - birthYear;
}
const age1 = calcAge1(1991)

// Function expression
const calcAge2 = function (birthYear) {
  return 2037 - birthYear;
} // Anonymous Function
const age2 = calcAge2(1991);

console.log(age1, age2)
  • 파이썬과 마찬가지로 자바스크립트에서는 함수가 일급 객체(first-class object)이므로 변수에 담거나 함수의 파라미터로 활용할 수 있다.
  • JS의 Function expression은 익명함수 형태로 변수에 담을 수 있다는 점에서 파이썬의 람다 표현식과 같다고 보면 될 듯하다.
  • c.f. Python
def plus(x, y):
    return x+y
a = plus(2, 3)
print(a) # 5

# 파이썬 lambda expression
a = (lambda x,y: x+y)
print(a(2,3)) # 5

화살표 함수(Arrow Functions)

// Function expression
const calcAge2 = function (birthYear) {
  return 2037 - birthYear;
} // Anonymous Function

// Arrow function
const calcAge3 = birthYear => 2037 - birthYear;
const age3 = calcAge3(1991);
console.log(age3);
  • ES6에서 등장, 화살표 함수 역시 함수 표현식에 속한 것으로 구분된다.
  • => 를 사용하여 return도 생략하여 간단하게 표현할 수 있다.
  • 하지만 여러개의 파라미터와 코드가 필요하다면 아래처럼 사용할 수 있다.
const yearUntilRetirement = (birthYear, firstName) => {
  const age = 2037 - birthYear;
  const retirement = 65 - age;
  // return retirement;
  return `${firstName} retires in ${retirement} years`
}

console.log(yearUntilRetirement(1991, 'Jonas'));
  • 화살표 함수는 this keyword를 사용할 수 없다.
  • 각 함수의 종류를 알아두고 기호에 맞게, 필요에 따라 사용하면 됨

함수 안에서 함수 사용하기

function cutFruitPieces(fruit, pieces) {
  return fruit * pieces;
}

function fruitProcessor(apples, oranges) {
  const applepieces = cutFruitPieces(apples, 4);
  const orangepieces = cutFruitPieces(oranges, 4);
  const juice = `Juice with ${applepieces} apples and ${orangepieces} oranges`;
  return juice;
}

console.log(fruitProcessor(2, 3));

Leave a Reply

Your email address will not be published. Required fields are marked *