-
[Javascript] 함수 - 매개변수(parameters)와 인자(arguments)의 관계 & arguments.카테고리 없음 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 되었다고 한다.
반응형