본문 바로가기

javascript

(5)
우선순위 정렬 (javascript) 문법, 어휘, 표현, 듣기, 발음으로 이루어져 있는 영어시험을 보았고 결과를 점수별로 정렬하고 싶습니다. 하지만 동점인 과목이 있으면 더 중요하다고 생각하는 과목이 먼저 나올 수 있도록 정렬을 하려고 합니다. 이러한 경우 어떻게 해야 할까요? 아래의 코드상으로 보자면 scores배열에서 객체들를 score별로 정렬을 한 후 동점일 경우에 priority로 정렬을 하고 싶은 경우가 있을 것입니다. const scores = [ {title: "문법", score: 20, priority: 1}, {title: "어휘", score: 50, priority: 2}, {title: "표현", score: 80, priority: 3}, {title: "듣기", score: 15, priority: 4}, {t..
javascript call by value 와 call by reference 헷갈리는 점 정리 자바스크립트는 call by value와 call by reference에 대한 개념에 있어서 c언어와는 조금 다른 특징을 가지고 있습니다. 이 부분을 중점으로 시각화하여 정리했습니다. call by value와 call by reference에 대한 개념을 숙지하지고 포스팅을 보시면 도움이 됩니다. 결론 javascript는 기본적으로 항상 call by value입니다. 그렇기 때문에 파라미터로 넘어온 값들을 변경해도 원본 데이터는 변하지 않습니다. 하지만 참조형 타입의 데이터인 경우 속성을 변경할 경우 원본 데이터도 같이 변하는 경우가 있습니다. 자바스크립트는 기본적으로 call by value라고 했지만 원본 데이터가 변할 수도 있다고 하는 이유는 무엇일까요? 밑의 예시 들에서 그 이유를 설명합니..
자바스크립트 이터레이터란 자바스크립트 이터레이터를 구글에 검색해 보면 다음과 같은 정의가 나온다. "이터레이터는 ECMA2015부터 반영된 자바스크립트 반복기이다." 반복기..? 반복기가 도대체 뭐지..? 뭘 돌리는 기계 같은데.. 전혀 이해가 안 갔다. 나뿐만 아니라 많은 사람들도 헷갈리는 표현이라는 생각이 들었다. 그래서 이터레이터를이터레이터를 다음과 같이 더 쉽게 표현해보고자 한다. 이터레이터를 쉽게 풀어서 한 문장으로 정의하자면, 이터레이터란,모든 순회할 수 있는 객체(대표적으로 배열, 스트링)의 원소에 하나하나에 접근할 수 있는 능력을 가진 객체이다. 다만, 개별 원소에 접근하는 방식에는 일정한 규칙을 따라야지 이터레이터이다. 여기서 말하는 일정한 규칙이란 이터레이터 프로토콜이다. 즉 접근하는 방법이 객체마다 다르지 않..
자바스크립트 클로저와 호이스팅 클로저란 함수와 스코프 사이의 폐쇄적 관계이다. 좀 더 구체적으로 다음과 같이 정의해 보았다. 정의 1. 클로저란 독립된 스코프를 참조하는 함수다. 정의 2. 클로저란 내부함수에서 외부함수의 렉시컬 스코프를 참조하는 관계다. 굉장히 추상적이기에 실제코드와 사전개념을 학습해야 이해가 쉽다. 사전 개념으로서 스코프와 호이스팅을 먼저 이해해야 한다. 스코프란 스코프는 영어 뜻 그대로 범위이며, 자바스크립트는 함수레벨 스코프 var를 갖는게 특징이다. 함수레벨 스코프란 함수내에서 해당 변수의 범위가 미치는 것을 말한다. 즉, 함수내에서 var i = 10이 생성 된다면 함수 내에 중괄호가 있던 없던 어디에서든 var i 를 참조할 수 있는 것이다. 자바와 같은 언어에서는 블록레벨 스코프(중괄호 안에서 변수의 범..
자바스크립트 참조, 얕은복사, 깊은복사의 차이점 참조 참조형 타입의 객체는 데이터를 직접 보관하고 있는 것이 아니라 데이터가 보관된 메모리 주소를 기억하고 있습니다. 참조형 타입을 다른 변수에 대입하게 되면 복사가 일어나지 않고 참조가 일어나게 됩니다. 참조란 실제 데이터를 복사하는 것이 아니라 데이터가 있는 주솟값을 공유하는 것을 의미합니다. 즉, sports와 sports2 둘 모두 같은 주소를 가리키고 있는 것이며 원본 데이터["soccer", "baseball", "basketball"]를 공유하고 있는 것입니다. 그래서 sports2를 수정하였을 때 sports도 수정이 됩니다. const sports = ["soccer", "baseball", "basketball"]; // 원본 데이터 const sports2 = sports; // 대입..