728x90
반응형
자바스크립트 함수에서 argument와 this
인자(argument)에서 함수의 매개변수(parameter)
함수를 호출할 때 인자 목록을 제공하면, 이 인자들은 함수를 정의할 때 지정한 매개변수에 각 매개변수의 순서대로 할당된다.
(첫 번째 인자는 첫 번째 매개변수에 할당, 두 번째 인자는 두 번째 매개변수에 할당)
자바스크립트는 인자 개수와 매개변수의 개수가 다르더라도 에러가 발생하지 않는다.
=> 매개변수보다 많은 인자가 제공되었다면, ‘남은’ 인자들은 매개변수에 할당되지 않는다.
function whatever(a, b, c) { … }
whatever(1, 2, 3, 4, 5)를 호출하면 인자 1, 2, 3은 각각 a, b, c 에 할당 되며, 인자 4, 5는 어떤 매개변수에도 할당되지 않는다.
=> 만약 인자보다 매개변수가 많을 경우, 인자와 부합하지 않는 매개변수는 undefined로 설정된다.
whatever(1)과 같으 호출한다면 매개변수 a는 1이 할당되고, b, c에는 undefined로 설정된다.
여기서 신기한 점은 모든 함수 호출에는 암묵적으로 arguments와 this 두 매개변수가 넘어온다는 점이다.
이 매개변수들은 눈에 보이지 않게 함수에 전달되고 어쨌거나 함수 내의 유효 범위에 존재한다.
Arguments 매개변수
Arguments 매개변수는 함수에 전달된 모든 인자들을 담고 있는 컬렉션이다.
위에서 본 예로 설명하자면, whatever(1, 2, 3, 4, 5)를 호출하였을 때, 매개변수로 1, 2, 3을 얻을 수 있지만 , arguments에 접근하면 유사배열의 형태로 [1, 2, 3 ,4, 5] 의 값이 들어있다.
arguments에 length 프로퍼티가 있어서 배열로 보기 쉬운데, Array(배열)이 아니기 때문에 Array 객체의 유용한 메서드들이 존재하지는 않는다.
This 매개변수
this매개변수는 암묵적으로 함수 호출과 관계된 객체를 참조하며, 이를 ‘함수 컨텍스트’ 또는 ‘실행 컨텍스트’라고 부른다.
자바에 존재하는 this는 그 메서드가 정의되어 있는 클래스의 인스턴스를 가리키는데, 자바의 this와는 살짝 다른 면이 존재한다.
자바에서는 this가 ‘어떤 식으로 함수를 정의하였나’ 이고, javascript에서 this는 함수를 어떻게 ‘호출’ 할 것인가와 관련이 있다.
728x90
반응형
'프로그래밍 노트 > JAVASCRIPT' 카테고리의 다른 글
[Javascript] 함수의 호출_3 (생성자로 호출, 생성자의 기능) (0) | 2018.11.27 |
---|---|
[Javascript] 함수의 호출_2 (메서드로 호출) (0) | 2018.11.27 |
[Javascript] 함수의 호출_1 (함수로 호출) (0) | 2018.11.27 |
[Javascript] 함수 (0) | 2018.11.26 |
[JavaScript] DOM 접근 - querySelector (0) | 2018.09.21 |