카테고리 없음

[TIL] Javascript-3

note-for-development 2024. 1. 4. 21:56

 

 

[2024.01.04 목요일]

 

1. 개념정리

1) 없음을 나타내는 값

(1) null : 메모리 주소가 지정되지 않은 식별자에 접근하는 경우 등. 있어야 하는데 없음

(2) undefined : 할당된 값의 위치는 있으나 값이 입력되지 않은 경우 등.

*undefined는 없음 대용으로 사용하는 것은 지양해야 한다.

 

2) 실행컨텍스트

함수를 실핼하는 환경 정보 모음이다.

콜스텍에 쌓아올려 in, out을 구분함으로서 함수 실행 순서를 파악할 수 있다.

(1) VariableEnvironment : 식별자 정보(record)+외부 환경 정보(outer)+선언 시점 정보(snapshot)

(2) LexicalEnvironmen : 식별자 정보(record)+외부 환경 정보(outer)+변경사항이 반영된 정보

 

-record 대상 : 함수의 매개변수 식별자(대입된 값), 함수 자체, 변수 식별자

호이스팅 : 함수의 매개변수를 대입한 뒤 변수와 함수를 모두 위로 올린다. 순서대로 적용한다.

*호이스팅의 결과 함수 표현식은 변수와, 함수 적용 부분이 나누어져 있어 변수만 올리는 반면

함수 선언문은 함수 자체로 나누어져 있지 않으며 통째로 올린다. 따라서 함수 선언문을 작성할 경우 문서 전체에 영향을 줄 수 있다.

-outer 대상 : 내부 함수가 끝나 실행컨텍스트가 한단계 낮아졌을 때, 상위 컨텍스트를 읽어 값을 대입한다.

*선언 당시의 LE 정보가 들어있기 때문.

 

(3) thisbinding : 실행될 때 this가 정해지므로 binding한다고 한다.

전역 객체의 경우 : window(브라우저), global(node)

- 함수, 자동 실행 함수 등 주체가 명확하지 않은 경우

- 내부의 함수

- 화살표 함수

정보를 나타내는 경우

- 메소드로 사용되어(. or []) 주체가 명확한 경우

- self 등으로 변수를 지정하여 this를 사용하는 경우

- bind 매소드로 this를 일부만 지정하여 유사한 함수로 보관하는 경우

 

2. 적용 가능한 메소드 등

Math.trunc : 소수점 이하 버림

Math.floor : 소수점 이하 내림

*두 메소드는 음수에 적용할 경우 서로 다른 값을 나타내니 주의한다.

 

3. 해당 개념의 적용과 중요한 점

함수 내부에서 변수에 값을 대입하는 경우 원하는 값과 다른 값이 나올 때가 있다.

이것은 호이스팅의 결과 변수의 선언이 먼저 이루어지기 때문에 발생하는 문제다.

따라서 호이스팅 문제가 발생하지 않도록 겹치는 변수를 너무 많이 사용하지 않도록 주의하는 것이 좋다.

this의 경우 새로운 객체를 생성하는데 사용이 용이하지만, 메소드와 함수의 사용 여부에 따라 값이 변화할 수 있다.

메소드의 경우 상위 객체의 값을, 함수의 경우 전역 객체의 값을 사용하는 것에 유의해야 한다.

 

4. 시행착오 및 문제 해결 과정

var getAged = function (user, passedTime) {
let newuser = {};
for (var prop in user) {
newuser[prop]=user[prop]
}
newuser.age += passedTime
return newuser;
}

for in 구문에서 var 를 써야 하는 것을 주의해야 한다.

function nameif (str) {
let reverse="";
for (i=1; i<=str.length; i++){
let numberreverse=str.length-i
reverse[i] = str[numberreverse];
}
return console.log(reverse);
}

nameif ("foryou")

실행이 안되는 이유를 모르겠음.

 

5. 하루 회고

생각보다 진도가 나가지 않은 상태다. 개인 과제와 병행하며 해야할지 고민중에 있다.

오늘 하루도 열심히 했다. 내일도 화이팅.