Javascript와 반복문
자바스크립트를 처음부터 다시 생각하고 공부해 보려고 한다.
자바스크립트에서 반복문이란 무엇일까?
프로그래밍 언어에서 반복문이란 특정 구문을 여러번 반복해서 처리하는 방법을 이야기 한다.
이를 구현하기 위해 대부분의 언어에서는 for 나 while 문이 존재한다.
Javascript 에서는 대표적인 반복문으로 for와 while 이 존재한다.
for (초기값; 조건; 반복) { 구문 } 으로 구성되어 있다.
while (조건) { 구문 } 으로 구성되어 있다.
do { 구문 } while (조건) 으로 구성되어 있다.
반복문의 초기 부분을 제외한 모든 부분은 반복된다.
때문에 만약 for(var i=1; i < arr.length; i++) 으로 작성했다면, arr.length을 호출하고 값을 비교하는 것을 반복한다.
이 작업을 줄이기 위해서 한번만 참조해도 되는 arr.length 값을 임시변수에 저장해 두고 사용하여 작업량을 줄일 수 있다.
var length = arr.length;
for(var i=1; i < length; i++)
조건문이 계속 True 일 경우 무한하게 작업이 진행된다. 이를 무한 루프라고 부른다.
싱글 스레드인 Javascript의 무한 루프의 가장 큰 문제는 스크립트 동작 중에는 브라우저 렌더링 작업 및 어떠한 행위도 동작되지 않는다.
만약 중간에 반복문을 멈춰야 한다면, break 나 return 을 이용해서 반복문을 강제로 빠져나갈 수 있다.
for in 과 for of
자바스크립트에는 특별한 반복문이 존재하다.
for 문 안에 in 과 of 를 사용할 수 있다.
for in
for( property in object ) 은 객체의 심볼이 아닌 열거 [[Enumerable]] 가능한 모든 property 을 반복 할 수 있다.
Enumerable 은 Object.defineProperty 으로 설정이 가능하다.
Array는 Array Iterator 를 반복한다.
String은 ArrayLike 이기 때문에, Array 처럼 처리될 수 있다.
ArrayLike는 Array 처럼 index (a[0]) 로 접근이 가능하고, length 속성이 존재한다. 하지만 Array 객체가 아니기 때문에 prototype 은 Array 를 참조하지는 않는다.
for of
for of 은 반복 가능한 객체 (iterables)을 반복한다.
iterables 에는 String, Array, TypedArray, Map, Set 이 있다.
Array 객체
Javascript에서는 배열 객체를 반복하는 메서드가 존재한다.
Array.prototype.forEach 으로 배열을 반복할 수 있다.
arr의 forEach 동작 중 arr의 참조 객체가 변경되면, forEach의 값은 이전 참조 객체 값으로 유지 되지만, arr의 객체의 값이 변경된다면 forEach의 값은 변경된 값이 전달된다.