boolean, number, string  : 원시 값을 편리하게 조작하기 위해 디자인된 참조 타입. 원시값을 읽을때마다  내부적으로 인스턴스가  생성되므로 메서드를 사용할 수 있다. 다른 참조타입들과 다른 원시값과의 관계가 있다.

원시값을 읽는 순간

1. String 타입의 인스턴스를 만든다.

2. 해당 인스턴스에서 메서드를 호출한다.

3. 만들었던 인스턴스를 파괴한다.

원시값들은 객체가 아니므로 원래 메서드를 사용할 수 없는데, 위와 같은 일이 일어나므로 메서드를 사용할 수 있다.(마치 객체처럼 사용할 수 있다.)

다른 참조타입과 원시래퍼타입의 가장 큰 차이는 생명주기이다.

new 연산자를 사용해 참조 타입의 인스턴스를 만들면 스코프를 벗어날 때까지 메모리에 존재하지만, 자동으로 생성된 원시 래퍼 타입은 코드의 해당 행을 벗어나는 즉시 파괴된다.





함수의 실행 결과 값을 새로운 변수에 담을때는 함수를 실행하는 기호 () 를 붙여서 할당하고,

함수 자체를 새로운 변수에 담을 때는 함수명만(기호()는 제외)을 할당한다.

function gh() {

return 5

}

var js = gh <--- gh 함수 자체를 js 변수명에 할당

var js = gh() <---gh함수 자체가 아닌 gh 함수를 실행한 "결과값" 5를 할당한다.


함수는 객체이다. 따라서 메서드와 프로퍼티를 가진다. 

모든 함수에 공통인 프로퍼티는 length 와 prototype이다.

length : 함수가 넘겨받을 것으로 예상하는 이름 붙은 매개변수의 숫자

prototype : 모든 참조 타입의 인스턴스 메서드가 존재하는 곳.

toString(), valueOf() 같은 메서드가 존재 한다.

apply(), call() 이라는 함수의 메서드가 있다. 이 둘 모두 소유자인 함수를 호출하면서 this를 넘긴다.

apply() 메서드의 경우 - 첫번째 인자로 this, 두번째 인자로 arguments 또는 Array의 인스턴스를 넘긴다.

call() 메서드는 모든 기능이 apply() 메서드와 같고, 다만 두번째 인자로 arguments 나 Array가 아닌 매개변수를 나열해야 한다.

apply(), call()의 주요 기능은 this(실행 컨텍스트)를 바꾸는 데 있다.


bind() : 새 함수 인스턴스를 만드는데, 그 this는 bind()에 전달된 값이다.



함수 내부에는 arguments, this 라는 특별한 객체가 있다.

arguments 객체 : 배열과 비슷한 객체, 함수에 전달된 매개변수를 모두 포함한다.

                            함수 매개 변수를 표현하는 것이 주요 목적인 객체.

      arguments 객체의 소유자인 함수를 가리키는 포인터인 callee라는 프로퍼티도 있다.

this 객체 : 함수가 실행중인 컨텍스트 객체에 대한 참조.

this의 값은 함수를 호출하는 시점에 정해진다. 따라서 해당 함수가 반환하는 값 역시 함수를 호출하는 시점에 따라 다르다.

caller 프로퍼티 : 해당 함수를 호출한 함수에 대한 참조를 저장.

전역 스코프에서 호출하면 null이 저장된다.

함수와 이름 사이의 의조성을 제거 하려면  arguments.callee.caller를 쓸 수 있다.

예) function outer() { inner() }

function inner() { alert(inner.caller)}

function innter() {alert(arguments.callee.caller)}

※ strict 모드에서는 arguments.callee, arguments.caller 의 호출은 에러를 낸다. 스트릭트 모드에서는 해당 프로프티 사용에는 좀 더 주의가 필요하다.

※ 함수 이름은 단순히 포인터를 저장한 변수일 뿐이다. 즉 함수의 내용 자체와 함수명은 별개로 생각해야 한다. 함수명은 단순히 어떤 함수 내용을 가리키는 포인터일 뿐이다.


함수 이름은 단지 변수일 뿐이므로 함수도 다른 값이 올 수 있는 곳이라면 어디든 올 수 있다.

이런 특징 덕분에 함수를 다른 함수에 매개변수로 넘기거나(콜백함수), 함수가 실행 결과로 다른 함수를 반환하는 일이 가능하다.


모든 함수는 Function 타입의 인스턴스이다.

다른 참조 타입과 마찬가지로 프로퍼티와 메서드를 가진다.

함수 역시 객체이므로 함수 이름은 단순히 함수 객체를 가리키는 포인트일 뿐이다.

※함수를 실행하지 않고 단지 함수를 가리키는 포인터(함수 이름)에 접근하기만 할 때는 괄호를 쓰면 안됨 (아래 이미지에서 var another = sum 이 예제)

위 이미지에서 sum에 null을 할당 하고나서 another에서 기존 함수가 원래대로 동작하는건 이해가 되는데.. another를 찍었을때.... 담겨있는 함수 이름이 sum으로 나오는건...... 잘 이해가 안된다.


정식 이름 

 짧은 이름

 설명

 input

 $_

 마지막으로 테스트한 텍스트

 lastMatch

 $&

 마지막으로 일치한 문자열

 lastParen 

 $+

 마지막으로 일치한 캡처 그룹

 leftContext 

 $' 

 input 텍스트에서 lastMatch 앞에있는 문자열 

 multiline 

 $* 

 모든 정규 표현식이 다중 행 모드(m)을 사용해야 하는지 표현하는 불리언 값 

 rightContext 

 $' 

input 텍스트에서 lastMatch 다음에 오는 문자열 


exec() - 그룹을 캡쳐할 의도로 만들어진 메서드

※캡쳐 - 패턴으로 넘겨지는 문자열중 괄호로 묶은 하나의 그룹

두 개의 인자를 가짐. 

1. 첫번째 인자 - index - 패턴이 일치한 위치를 나타냄 (일치한 단어의 마지막 단어의 인덱스)

2. 두번째 인자 - input - 패턴으로 넘긴 문자열


test() - 패턴의 문자열이 있으면 true, 없으면 false를 반환하는 메서드



+ Recent posts