일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- 캡슐화
- 노마드코더
- CSS
- js
- 부트캠프
- frontend
- 객체지향프로그래밍
- 논리연산자
- Props
- OOP
- Zustand
- 타입스크립트
- 자바스크립트
- typeScript
- Fetch
- 리액트
- 추상화
- 투두앱만들기
- webdevelopment
- 클래스
- JavaScript
- 웹개발
- 자바스트립트
- 프론트엔드
- 패스트캠퍼스
- REACT
- 불변성
- 상속
- Hooks
- github
- Today
- Total
connecting dots
JS 2회차 | 함수: 일급함수, 즉시실행함수, 화살표함수, 클래스, 메소드, scope, var/let/const, 복사와 참조 본문
JS 2회차 | 함수: 일급함수, 즉시실행함수, 화살표함수, 클래스, 메소드, scope, var/let/const, 복사와 참조
dearsuhyun 2024. 6. 14. 10:12일급함수
함수를 값으로 취급하는 것 --> 일급함수
변수에 할당 가능, 인자로 전달 가능, return 가능
const obj = {
id: 1,
title: 'my obj'
};
function myFunction () {
return a;
}
obj.title = 'change';
obj.fn = myFunction();
const result = myFunction(myFunction)
함수
코드 묶음을 값으로 취급할 수 있는 수단
반드시 값(value)을 리턴한다 --> 리턴한 값을 호출한 곳에서 반환한다 !
함수 호출 ==> const result = myFeat(); --> myFeat()으로 이동
제어문 적인 성격 (코드의 흐름을 바꿈)
1. 이름없는 함수
그 자체로는 의미 있지만 호출할 수 없기 때문에 변수에 저장
const myFeat = function () {
return 0
};
2. 즉시 실행 함수
이름 없는 함수를 (감싸주면) 값으로 바뀌어서 문법적으로 문제 없음
값으로 만든 다음에 호출해주기 위해서 !
단 한번만 실행되어야 하는, 다시 실행하면 안되는 코드의 경우 이렇게 사용함
(function () {
}) ();
3. 화살표 함수 (람다함수, 한줄 함수)
문법 자체에 이름이 없는 함수임
일반 함수의 변수로 사용
const yourFeet = () => {
return 0
}
// 인자 없을 경우 괄호 생략 불가
const yourFeet1 = () => {
return 0
}
// 인자가 하나일 경우에만 괄호 생략 가능
const yourFeet2 = a => {
return a * 2;
}
// 함수 안에 실행 코드가 하나 뿐일 경우에는 {return} 생략 가능
const yourFeet2 = a => a * 2;
// 인자 두 개인 경우 괄호 생략 불가
const yourFeet1 = (a, b) => {
return 0
}
4. 내장 클래스 사용하여 함수 만들기
// 클래스, 함수를 반환함
Function ()
5. 함수 호출하는 세 가지 방법
myFeat()
myFeat.apply()
myFeat.call()
6. 메소드
const thisObject = {
id: 1,
getValue: function() {
return 1;
},
};
thisObject.id; // 속성을 읽어
thosObject.getValue(); // 메소드(객체 안에 속성인데 함수인 경우)
thisObject.toString(); // [object Object]
7. 상속
Object.create()
모든 object의 조상
thisObject.__proto__() --> object들를 가지고 있음(Object 클래스가 제공해주는 기능)
obj.toString() --> obj 함수 안에 존재하는 경우 그 값 출력 obj.__proto__.toString() --> Object 클래스가 제공해준 것 (상속) obj.xyz --> 없는 값이어서 undefined |
어떤 object든 최상의 object가 제공해주는 기능을 사용할 수 있음
중복되는 코드를 쓰는게 아니라 상속의 방법을 씀
8. scope
같은 scope 내에서 같은 이름을 가질 수 없다
1) 전역스코프(global): 어떤 것에도 감싸져 있지 않는 스코프
2) 지역스코프(local)
- 함수 안쪽
- 블럭스코프
if (a===1) {
const b = 10;
}
b; // error, if안에서만 동작
scope는 중첩됨 ! (작은 scope에서 못 찾으면 그 밖으로 --> 전역에서도 없으면 undefined)
var, let, const
var
전역공간에 무엇인가를 만드는 것은 좋지 않음(여러 문제 발생 가능)
블록 스코프 지원하지 않음
var xyz = 100;
xyz // 100
window.xyz // 100
// var는 window(전역공간)에 만들어짐
cf. 호이스팅(hoisting)
함수가 호출되고 함수의 변수들을 끌어올려서 먼저 만듦
let
let abc = 100;
abc // 100
window.abc // undefined
// 템퍼럴 데드존이라는 스코프가 따로 생긴거고 윈도우 객체의 속성으로 붙이지 않음
복사와 참조
참조: 객체
복사: 그 외의 모든 값
let a = 10;
let b = a;
console.log(b) // 10
b = 100;
console.log(a) // 10
// 값이 옮겨질 때 무슨일이 벌어지는가 ?
let x = {id:1}
let y = x;
console.log(y.id); // 1
y.titile = 'Y';
console.log(x.title) // Y
// x와 y는 같은 객체를 참조하고 있어서 y의 변경은 x에도 적용됨
x = {id: 2}
console.log(y.id) // 1
// 모든 값은 바꿀 수 없다 (불변)
// x가 바라보는 객체가 1 --> 2로 바뀐 것임.
// 즉 누굴바라보는가에 대한 정보를 가지고 있는거지 그 객체 자체를 가지고 있는게 아님(복사가 아님)
function feat(a) {
console.log(a.id) // 1
a = { id: 1, title: 'feat' };
}
// return이 명시되지 않으면 자동으로 undefined를 return함 (자동 return 메카니즘)
let a = { id: 1 };
feat(a);
console.log(a.title) // undefined
let b = [객체1]{id:1, title:'feat'};
let c = 10;
let x = b;
b = 객체1
c = 10;
x = 객체1 // 값 자체가 들어가는 것이 아님 (참조)
'Live Class > DevCamp' 카테고리의 다른 글
JS 6회차 | 토이 프로젝트 설명, import/export, axis, express, app.get, SQL (0) | 2024.06.16 |
---|---|
JS 1회차 | 식, 값, 문, 실행(run), 변수를 만드는 방법, 메커니즘, 객체의 특징, 함수를 만드는 방법 (0) | 2024.06.15 |
HTML/CSS 3회차 | CSS 기초, flex, grid, 미디어 쿼리, CSS 네이밍 방법론, css framework (1) | 2024.06.15 |
HTML/CSS 2회차 | CSS 기초, box model, flexbox (0) | 2024.06.14 |
HTML/CSS 1회차 | html 기초, DOM (1) | 2024.06.14 |