Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- 배열
- Promise
- 순수함수
- ReactNative
- 유사배열객체
- 자연어처리
- 플러스친구
- 변수
- 카카오톡채널
- 함수
- 콜백함수
- async
- closure
- 오픈채팅
- trim
- callback
- es7
- vuejs
- 자바스크립트
- callbackhell
- 오픈빌더
- 챗봇
- es6
- JavaScript
- developers
- 객체
- 카카오
- await
- arguments
- expo
Archives
- Today
- Total
말랑말랑 LAB
[JavaScript] 모던 자바스크립트 입문 - 4장 객체와 배열, 함수의 기초 본문
4. 객체와 배열, 함수의 기초
4.1 객체의 기초 ① 객체 리터럴
4.1.1 객체
- 이름과 값을 한 쌍으로 묶은 데이터를 여러 개 모은 것
- 이때 데이터 하나(이름과 값의 쌍)를 객체의 프로퍼티라고 함
- 데이터 여러 개를 하나로 모은 복합 데이터
- 연관 배열 또는 사전이라고 함
4.1.2 객체 리터럴로 객체 생성하기
- var card = { suit: "하트", rank: "A" };
- {...} 부분이 객체 리터럴
- 객체 리터럴을 변수 card 에 대입
- card.color // undefined
- 객체에 없는 프로퍼티를 읽으려고 시도하면 undefined 반환
- var obj = {}
- 객체 리터럴 안에 어떠한 프로퍼티도 작성하지 않으면 빈 객체가 생성됨
4.1.3 프로퍼티 추가와 삭제
- card.value = 14;
- 없는 프로퍼티 이름에 값을 대입하면 새로운 프로퍼티가 추가됨
- delete card.rank;
- delete 연산자로 프로퍼티 삭제 가능
4.1.4 in 연산자로 프로퍼티가 있는지 확인하기
- var card = { suit: "하트", rank: "A" };
console.log("suit" in card); // true
console.log("color" in card); // false - 객체에 특정 프로퍼티가 있는지 확인
- 프로퍼티가 객체에 포함되어 있으면 true, 포함되지 않으면 false
- console.log("toString" in card); // true
- 원래 toString 프로퍼티는 card 객체에 선언되지 않았지만 Object 객체를 상속받았기 때문에 true
- 따라서, in 연산자가 조사하는 대상이 그 객체가 가진 프로퍼티와 그 객체가 상속받은 모든 프로퍼티임을 알 수 있다
4.1.7 객체는 참조 타입
- 객체 타입의 값을 변수에 대입하면 그 변수에는 객체의 참조(메모리에서의 위치 정보)가 저장됨
- var a = card;
console.log(a.suit); // 하트
a.suit = "스페이드";
console.log(a.suit); // 스페이드
console.log(card.suit); // 스페이드 - 변수 a가 card 객체를 참조하게 되므로 a 로 card 객체를 읽거나 수정 가능
4.2 함수의 기초
4.2.1 함수
- 입력을 받아 함수 안의 프로그램에서 특정 작업 수행 후, 함수 값을 반환
- 인수: 함수의 입력 값
- 반환값: 함수의 출력 값
4.2.2 함수 선언문으로 함수 정의하기
- function square(x) { return x * x; }
- function 키워드 사용해서 함수 정의
4.2.4 함수 호출
- square(3);
- 인수로 넘긴 값인 3이 함수 정의문의 인수 x로 전달되어 실행됨
- 함수 호출할 때 전달하는 값을 인수(argument)
- 함수 정의문의 인수를 인자(parameter)
4.2.5 인수
- 함수는 인수를 여러 개 받을 수 있음
- function dist(p, q) {
var dx = q.x - p.x;
var dy = q.y - p.y;
return Math.sqrt(dx*dx+dy*dy);
} - 두 점 사이의 거리를 구하는 함수
- Math.sqrt는 제곱근 구하는 함수
- var p1 = {x:1, y:1}
var p2 = {x:4, y:5}
var d = dist(p1, p2); // 5 - 함수 dist를 사용하여 두 점 사이의 거리를 구한다
- var bark = function() { console.log("Bow-wow"); };
bark(); // Bow-wow - 인수를 받지 않는 함수도 정의할 수 있음
- 위 bark() 함수처럼 return 문이 없는 함수는 반환값이 undefined 가 된다
4.2.7 함수 선언문의 끌어올림
- console.log(square(5)); // 25
function square(x) { return x * x } - 자바스크립트 엔진은 함수 선언문을 프로그램의 첫머리로 끌어올림
4.2.8 값으로서의 함수
- 자바스크립트에서는 함수가 객체
- function square(x) { return x * x }
- 'square' 라는 이름의 변수와 함수 객체가 생성됨
- 그 변수에 함수 객체의 참조가 저장됨
- var sq = square;
console.log(sq(5)); // 25 - 이 변수 값을 다른 변수에 할당하면 그 변수 이름으로 함수 실행 가능
4.2.9 참조에 의한 호출과 값에 의한 호출
- function add1(x) { return x = x + 1; }
var a = 3;
var b = add1(a);
console.log("a = " + a + "b = " + b); // a = 3, b = 4 - 값의 전달
- add1 함수가 호출될 때 변수 a의 복사본이 인자 x에 할당됨
- 이때 변수 a와 변수 x는 다른 영역의 메모리에 위치한 별개의 변수
- function add1(p) { p.x = p.x + 1; p.y = p.y + 1; return p; }
var a = { x: 3, y: 4 }
var b = add1(a);
console.log(a, b); // Object {x=4, y=5}, Object {x=4, x=5} - 참조 전달
- 변수 a에 객체 {x:3, y:4} 의 참조가 저장되어 있으며, 이 참조 값을 인자 p에 전달
- 이때 인자 p와 변수 a는 똑같은 객체를 참조하고 있어 함수의 인수로 객체를 넘기면 원래의 객체 값을 변경할 수 있음
4.2.10 변수의 유효 범위
- 유효 범위: 변수에 접근할 수 있는 범위
- 자바스크립트 변수는 변수의 유효 범위에 따라 두 가지로 구분
- 전역 변수: 함수 바깥에서 선언된 변수. 유효 범위가 전체 프로그램
- 지역 변수: 함수 안에서 선언된 변수와 함수 인자. 유효 범위는 변수가 선언된 함수 내부
- 변수에 유효 범위가 있는 이유는 프로그램의 다른 부분에서 선언된 이름이 같은 변수와 충돌하지 않도록 하기 위함
- function f() {
a = "local";
console.log(a);
return a;
}
f();
console.log(a); - 변수 a는 선언 없이 값만 대입하고 있으므로 전역 변수
4.2.11 블록 유효 범위: let과 const
- let과 const는 '블록 유효 범위'를 갖는 변수. 즉, {} 안에서만 유효
- let은 변수 선언, const는 한 번만 할당할 수 있는 상수 선언
- 자바스크립트 엔진은 let 문으로 선언한 변수를 끌어올리지 않음
- const 문으로 선언한 상수 값은 수정할 수 없지만,
상수 값이 객체이거나 배열일 경우에는 프로퍼티 또는 프로퍼티 값을 수정할 수 있음
4.2.12 함수 리터럴로 함수 정의하기
- var square = function(x) { return x * x; };
- function(x) {...} 부분이 함수 리터럴
- 함수 리터럴은 이름이 없는 함수이므로 익명 함수 또는 무명 함수라 불림
- var square = function sq(x) { return x * x };
- 익명 함수에도 이름 붙일 수 있음
- 그러나, sq라는 이름은 함수 안에서만 유효
4.2.13 객체의 메서드
- 메서드: 객체의 프로퍼티 중에서 함수 객체의 참조를 값으로 담고 있는 프로퍼티
- var circle = {
center: { x:1.0, y:2.0 },
radius: 2.5,
area: function () {
return Math.PI * this.radius * this.radius;
}
}; - 함수 객체 안의 this는 그 함수를 메서드로 가지고 있는 객체를 가리킴
- 메서드는 일반적으로 메서드가 속한 객체의 내부 데이터(프로퍼티 값) 상태를 바꾸는 용도로 사용
'JavaScript > JavaScript 스터디' 카테고리의 다른 글
[JavaScript] 고차 함수 (0) | 2019.01.05 |
---|---|
[JavaScript] 클로저 (0) | 2019.01.05 |
[JavaScript] 함수의 정의 (0) | 2019.01.05 |
[JavaScript] 제어문 (0) | 2018.12.28 |
[JavaScript] 모던 자바스크립트 입문 - 3장 변수 (0) | 2018.12.13 |