본문 바로가기
반응형

Archive188

call/apply 와 데코레이터, 포워딩 자바스크립트의 함수는 유연성이 높아, 함수를 이곳저곳 전달하고, 객체로도 사용된다. 그래서 함수의 호출을 포워딩(forwarding), 데코레이팅(decorating)을 할 수 있다. 용어를 정리하자면 함수의 행동을 변경시켜주는 함수를 데코레이터라고한다. 아래 코드는 함수의 결과값을 캐싱해서, 이미 했던 연산이라면 캐싱된 값을 반환하도록 하는 데코레이터이다. 이 데코레이터 함수는 어떤 함수든지 그 결과값을 캐싱하도록 해주는 데코레이터이다. function slow(x){ console.log(`${x} called!`) } function cachingDecorator(func){ let cache = new Map(); return function (x){ if(cache.has(x)){ return .. 2022. 9. 1.
잘안알려진 함수특성 객체로서의 함수 자바스크립트에서 함수는 값으로 취급된다. 자료형은 객체이다. 근데 호출을 할 수있는 특별한 형태일뿐, 객체의 속성을 그대로가지고있어서, 프로퍼티를 추가하거나 제거할 수 있다. 함수객체에는 기본적으로 name, length 프로퍼티가 있다. 자바스크립트 명세서에는 contextual name 이라고한다. function sayHi() { alert("Hi"); } alert(sayHi.name); // sayHi 객체의 메서드이름도 가져올 수 있다. let user = { sayHi() { // ... }, sayBye: function() { // ... } } alert(user.sayHi.name); // sayHi alert(user.sayBye.name); // sayBye len.. 2022. 8. 31.
전역 객체 전역객체를 이용하면 어디서든 접근가능한 변수나 함수를 만들 수 있다. 전역 객체는 언어자체나 호스트 환경에 기본으로 내장되어있는 경우가 많은데, 자바스크립트에서는 브라우저에서는 window, node에서는 global 이라고 부른다. 그런데 각 환경에 따라 이렇게 이름이 다른것을 표준화하기 위해서 globalThis를 참조하면 각 환경에 맞는 전역객체를 참조한다. globalThis = window , global 그래서 흔히, 선언하지도 않고 사용하는 함수, 변수들은 전역객체의 프로퍼티이다. alert("Hello"); // 위와 동일하게 동작합니다. window.alert("Hello"); 브라우저에서는 let,const가 아닌 var로 선언한 전역 함수나, 변수는 전역객체의 프로퍼티가 된다. var.. 2022. 8. 31.
렉시컬 환경과 클로저 자바스크립트는 함수 지향언어라는 점에서 개발자가 자유도를 느낄 수 있다. 한번 작성한 함수는 어디서든 호출해서 사용할 수 있기 때문이다. 그래서 함수에대한 특성을 잘 알고있어야 그만큼 입맛대로 사용할 수 있다. 아래는 {} 코드블록으로 변수의 범위를 분리했다. let,const로 선언한 변수는 블록이 변수의 범위이다. { // 지역 변수를 선언하고 몇 가지 조작을 했지만 그 결과를 밖에서 볼 수 없습니다. let message = "안녕하세요."; // 블록 내에서만 변숫값을 얻을 수 있습니다. alert(message); // 안녕하세요. } alert(message); // ReferenceError: message is not defined 하지만 var를 사용하면 결과가다르다. var의 유효범위.. 2022. 8. 31.
재귀와 실행컨텍스트  자바스크립트의 동작원리의 핵심은 callstack에서 함수를 실행시키는 것이다. 그리고 개발자는 원하는 동작을 위해서, 사용자와 인터렉션을 통해 callstack에 함수를 쌓는다. 말그대로 스택의 자료구조를 가지고있기 때문에, 함수가 완전히 종료되고 나서야, 다음 함수를 실행한다. 그리고 이벤트루프를 통해서 callback queue에 쌓인 함수를 넣어주기 위해서는 callstack이 비어있어야 한다는 조건이 있다. 재귀 재귀란 것은, 함수가 자기자신을 호출하는 것을 말한다. 재귀는 왜 사용하는것일까? 크고 일련의 규칙이있는 문제를 작게 단순화하여 해결하기 위함이라고 생각한다. 예를들어서 거듭제곱하는 함수 pow를 구현한다고 가정하면 일반 for loop와 재귀를 통한 구현을 할 수있는데, 여기서 재.. 2022. 8. 31.
JSON 과 메서드 JSON은 Javasript Objct Notation의 약자이다. 말그대로 자바스크립트에서 사용될 목적으로 만들어진 포맷이다. (데이터를 교환할 목적) 처음 얼핏듣기로는 네트워크 통신을 할때 사용되는 포맷이라고 알고있었는데, 얼추 맞는말이긴한데 정확하게 정의를 이렇게 해버린다면 틀린말이다. 그러면 왜 JSON은 웹통신을 할때 거의 표준이되었을까? JSON은 객체를 문자열간에 손쉽게 변환해주고, 라이브러리를 사용하면 다른언어에서도 쉽게 JSON을 다룰 수 있어서 데이터의 교환 목적으로 사용되는 경우가 많다. JSON으로 변경경된 문자열은 JSON-encoded, serialized, stringified, marshalled 라고 부른다. JSON의 표현방식에는 문자열은 "", 객체 { } 배열 [ ] .. 2022. 8. 30.
반응형