728x90
반응형

자바스크립트 핵심키워드 요약

1. 리터럴 

데이터 구조에 대한 표현식이며 Instance를 생성하는 방법에 대한 축약식

var obj = new Object(); 를 객체 리터럴로 표현하면 var obj = {}; 가 된다. 

데이터를 표현하는데 굉장히 편리함


2.객체

이름,값의 쌍을 가진 데이터 구조


3.함수

실행 가능한 코드를 담은 객체 이다 객체이기때문에 이름,값을 가졌다.

function test() 의 test : 이름 , function : 값 (익명함수는 값만을가짐)

일급객체의 특성을 가짐 일급객체는그 자체가 값이 될수있는 특성

파라미터가될수있고,리턴값을 가질수있으며 변수에 대입될수있다.


4.메서드

객체의 프로퍼티로 존재하는 함수를 객체지향관점에서 메서드라고 부른다.


5.데이터 조작의 3요소

첫째 데이터를 복사할수있다 예를 들어, 값을 새로운 변수에 할당할 수 있다.

둘째 값을 함수나 메서드의 전달인자로 넘겨줄 수 있다.

셋째 두값이 동일한지 알아보기 위해 한값과 다른값을 비교할 수 있다.


6.값에의한 vs 참조에 의한 조작 (기본적으론 자바의 모델을 그대로 차용함)

1) Call By Value 기본자료형(Number,Boolean)에 대한 값의 전달,복사,비교(자바와 동일)

- 복사 : 실제로 값이 복사된다. 두 개의 개별적이고 독립적인 복사본이 존재

          - 전달 : 별개의 값 복사본이 함수에 전달되며 복사본을 변경해도 원본엔 영향을 주지않음

- 비교 : 동일한 값인지알아보기 위해 별개의 두값이 비교됨

2) Call By Reference 객체,배열은 참조하는 값에 대한 주소참조를 가지고있음.(자바와 동일)

- 복사 : 값에 대한 참조가 복사되기때문에 복사본에서 값의 변경이 일어나면 원본에도 동일한영향발생

- 전달 : 값에 대한 참조가 함수에 전달된다. 함수내에서 전달받은 참조를 통해 값을 변경하면 원본에도 동일한

             영향이 발생

- 비교 : 서로 동일한 값을 가리키는지 비교를 하더라도 다른 주소참조를 가지고있다면 두 참조는 같지않다.


7.호출객체(Call Object)

전역 변수들은 특수한 전역 객체들의 프로퍼티에 해당한다(window객체 등...) 전역 변수와 다르게 

지역 변수들은 전역 객체가 아닌호출 객체의 프로퍼티가 된다.호출 객체는 전역 객체보다 수명이 짧지만 쓰이는 목적은 동일하다.

함수를 실행하는 동안 그 함수의 전달인자와 지역 변수는 이 호출 객체의 속성으로 저장된다.

자바스크립트에서 지역 변수 용도로 전혀 별개의 객체를 사용하는 덕에 지역 변수가 같은 이름의 전역 변수를 덮어쓰는 것을 방지할 수 있는것이다.

네임스페이스 개념에서도 호출객체를 사용한다.

전역변수는 수많은웹페이지에서 어떤 클라이언트 자바스크립트 코드가 변경을 가할지 모른다.

그렇게 되면 예상치 못한 결과가 발생하거나 다른 프로그램에서 생성된 변수들과 충돌을 일으킬 수 있다.

이에 대해 코드를 함수 안에 넣고 함수를 호출하여 호출객체의 프로퍼티로 정의한다.

(function() {    // 이 함수는 이름이 없다.(익명함수)

// 코드는 여기에 넣는다.

// 선언된 모든 변수는 전역 네임스페이스를 어지럽히는 대신 

// 호출 객체의 프로퍼티가 된다.

})();    // 함수 리터럴을 종결하고 이를 지금 호출한다. 


8.클로저(Closure)

함수안에 함수가 중첩되어있는 문법을 클로저 라고 한다.

function a() {

var i = 0;

function b() { // 클로저

i++;

}

b();

return i;

}

클로저는 자바스크립트같이 자유도가 높은 언어에서 객체지향의 캡슐화를 구현하게 해준다.

클로저에서 바깥함수가 메서드인경우에 this키워드는 자신이 속한 객체를 가리킨다. 

하지만 안쪽의 중첩된함수에서의 this 키워드는 전역객체를 가리킨다. 그렇기때문에 아래와 같은 코드로 

중첩된함수에서도 자신을 포함한 객체의 참조를 가지기위한 꼼수를 사용해야한다.

var A = {

outerMethod : function() {

var self = this;

var innerFunc = function() {

self.log("A객체의 참조");

};

innerFunc();

},

log : function(msg) {

console.log(msg);

}

}







728x90
반응형

+ Recent posts