카테고리 없음

[Javascript] 함수 - 매개변수(parameters)와 인자(arguments)의 관계 & arguments.

꿈꾸는 사람_Anthony 2023. 2. 25. 15:20
반응형

신기하게 생긴 코드를 보았다.

출처: https://ko.javascript.info/promise-basics

 

음.. new Promise할 때는 resolve, reject 이렇게 두가지의 콜백 함수가 들어가야하는 것 아닌가?(아래와 같이 말이다)

 

javascript에 대한 지식이 부족했던지라, 바로 캐치하지 못했다. 이게 자바처럼 메소드 오버로딩의 일종이라고 생각했다.

하지만 프로미스는 하나의 생성자에 대한 정의만 가지고 있었다.

음 이게 무엇이지? ChatGPT에 물어본다. 자바스크립트의 기본 함수 호출 방식이라고 한다.

아 그렇구나! 근데 그게 뭐지?

mdn에서는 잘 못찾겠다. 없는게 아니라 내가 못찾은 것이겠지..

그나마 tcpschool에서 해당 내용을 찾았다.

http://tcpschool.com/javascript/js_function_parameterArgument

함수를 호출할 때 함수의 정의보다 적은 수의 인수가 전달되더라도, 다른 언어와는 달리 오류를 발생시키지 않습니다.
이 같은 경우 자바스크립트는 전달되지 않은 나머지 매개변수에 자동으로 undefined 값을 설정합니다.

그렇다고 한다.

없으면 undefined를 자동으로 설정해준다고 한다.

또 공부하면서 새로운 객체를 알게되었다. 바로 arguments이다.

https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Functions/arguments

매개변수(parameters)와 관계없이, 인자(arguments)들을 모두 받아서 배열과 같이(array-like, 배열은 아니다. length밖에 없다) 저장해두는 객체라고 한다.

위 예시와 같이 사용할 수 있다.

이 객체의 신기한 속성이 하나 있다.

arguments.callee이다.현재 실행중인 함수를 가르킨다.

따라서 아래와 같은 코드도 가능하다.

 

함수를 다른 변수에 할당해 사용할 수 있다.

ps. strict mode에서는 에러난다. https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Strict_mode

strict mode는 다음에 알아보자.

 

ps. caller라는 프로퍼티도 있지만 deprecated 되었다고 한다.

반응형