개발/HTML+CSS+JS

모던 자바스크립트 Deep Dive - 제 12장 (1)

고인호 2023. 5. 3. 17:51
반응형

<모던 자바스크립트 Deep Dive - 제 12장>

2023. 04. 16

 

 

 

12.1 함수란?)

프로그래밍 언어의 함수는 일련의 과정을 문(statement)으로 구현하고

코드 블럭으로 감싸서 하나의 실행 단위로 정의한 것을 의미한다. 

 

함수는 함수 정의를 통해 생성한다.

자바스크립트는 여러 방법으로 정의할 수 있다. 

 

 

함수 선언문을 통한 정의

function add(x,y){
  return x+y;
}

이렇게 함수 정의만으로 함수가 실행되는 것은 아니다.

함수는 함수 호출을 통해 실행되고, 반환값을 반환한다. 

const result = add(2,5);

console.log(result);    // 7반환됨

 


 

12.2 함수를 사용하는 이유)

함수는 몇 번이든 사용자가 원할 때 호출할 수 있으므로 코드의 재사용이라는 측면에서 유리하다.

이렇게 재사용이 가능한 함수는 유지보수의 편의성을 높이고 실수를 줄여 코드의 신뢰성을 높인다. 

 

 


 

12.3 함수 리터럴)

함수는 객체.

따라서 특정 변수에 할당이 가능하다. 

하지만 일반 객체는 호출할 수 없지만 함수는 호출이 가능하다. 

자바스크립트에서 함수가 객체라는 사실은 다른 프로그래밍 언어와 구별되는 자바스크립트의 중요한 특징이다. 

 


 

12.4 함수 정의)

함수 정의란 함수를 호출하기 전에 인수를 전달받을 매개변수와 실행할 문들,

그리고 반환할 값을 지정하는 것을 말한다. 

다음은 함수를 정의하는 4가지 방법이다. 

 

① 함수 선언문

function add(x,y){
  return x+y;
}

위의 함수 선언문은 함수 리터럴과 그 형태가 동일하다. 

하지만 함수 리터럴에서는 함수의 이름이 생략 가능하지만

함수 선언문에서는 함수의 이름을 생략할 수 없다. 

 

위의 함수 선언문은 표현식이 아닌 문 이다. 

잊었던 내용 다시 정리)

표현식의 가장 간단한 구별방법은  1. 값으로 평가가 가능한가, 2. 변수에 할당이 가능한가 이 두가지가 있었다. 

 

함수 선언문은 표현식이 아닌 문이기 때문에 함수 선언문을 콘솔창에 실행하면

"undefined"가 출력된다. 만약 함수 선언문이 표현식이라면, undefined가 아닌 평가된 값이 출력되었어야 한다. 

 

이런 표현식이 아닌 문은 표현식인 문과 다르게 변수에 할당할 수 없다. 

그런데 실제로 함수 선언문을 변수에 할당해보면 할당이 가능하다. 

-> 그 이유는 자바스크립트 엔진이 코드의 문맥에 따라서

함수 리터럴을 표현식이 아닌 문인 함수 선언문으로 해석하는 경우와 / 표현식인 문인 함수 리터럴 표현식으로 해석하는 경우가 있기 때문이다. 

즉, 자바스크립트 엔진은 중의적인 코드를 문맥에 따라서 다르게 해석이 가능하다는 것이다. 

(이거 좀 신기했다)

 

 

++ 아직 잘 이해는 안가서 나중에 다시 돌아와서 보기

자바스크립트 엔진은 생성된 함수를 호출하기 위해 함수 이름과 동일한 이름의 식별자를 암묵적으로 생성하고,

거기에 함수 객체를 할당함. 즉 함수는 함수 이름으로 호출하는 것이 아니고 함수 객체를 가리키는 식별자로 호출.

 

 

② 함수 표현식

const add = function(x,y){
  return x+y;
}

함수는 값처럼 변수에 할당할 수 있고, 프로퍼티 값이 될 수도 있으며 배열의 요소가 될 수도 있다. 

이처럼 값의 성질을 갖는 객체일급 객체 라고 한다. 

함수는 일급 객체기 때문에 위처럼 변수에 할당할 수 있다. 

 

 

 

 

 


https://link.coupang.com/a/F6ksK

 

모던 자바스크립트 Deep Dive:자바스크립트의 기본 개념과 동작 원리

COUPANG

www.coupang.com

"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."

반응형