본문 바로가기

Study/JS

(36)
스코프 스코프란? 모든 식별자(변수이름, 함수이름, 클래스이름)는 자신이 선언된 위치에 의해 다른 코드가 식별자 자신을 참조할 수 있는 유효범위가 결정된다. 이를 스코프라 한다. 즉, 스코프는 식별자가 유효한 범위를 말한다. 함수레벨 스코프 vs 블록레벨 스코프 함수레벨 스코프 코드블록이 아닌 함수에 의해서만 지역스코프가 생성된다. var키워드로 선언된 변수는 오로지 코드블록(함수 몸체)만을 지역스코프로 인정한다. 블록레벨 스코프 C나 JAVA등 대부분의 프로그래밍언어는 함수몸체만이 아니라 모든 코드블록(if,for,while, try/catch)등에서 지역스코프를 만든다. let, const는 블록레벨스코프를 지원한다.
순수함수와 비순수함수 순수함수 어떤 외부 상태에 의존하지도 않고 변경하지도 않는, 즉 부수효과가 없는 함수. 동일한 인수가 전달되면 언제나 동일한 값을 반환하는 함수. 오직 매개변수를 통해 함수 내부로 전달된 인수에게만 의존해 값을 생성해 반환한다. 만약 외부 상태에는 의존하지 않고 함수 내부상태에만 의존한다 해도 그 내부 상태가 호출될 때마다 변화하는 값(ex:현재시간)이라면 순수함수가 아니다. let count = 0; //현재 카운트를 나타내는 상태 //순수함수 increase는 동일한 인수가 전달되면 언제나 동일한 값을 반환한다. function increase(n){ return ++n; }; //순수함수가 반환한 결과값을 변수에 재할당해서 상태를 변경. count = increase(count); console.l..
콜백함수 콜백함수 //외부에서 전달받은 f를 n만큼 반복 호출하기. function repeat(n,f) { for(let i = 0; i < n; i++){ f(i); // i를 전달하면서 f를 호출한다. } }; let logAll = function(i){ console.log(i); }; //반복호출 할 함수를 인수로 전달한다. repeat(5, logAll); // 0 1 2 3 4 let logOdds = function(i){ if(i%2) console.log(i); }; //반복 호출 할 함수를 인수로 전달한다. repeat(5,logOdds); // 1 3 위 repeat함수는 경우에 따라 변경되는 일을 함수 f로 추상화했고 이를 외부에서 전달받는다. repeat함수는 더 이상 내부로직에 의존하..
중첩함수 중첩 함수 함수 내부에 정의된 함수를 중첩함수 또는 내부함수라 한다. 그리고 중첩함수를 포함하는 함수는 외부함수라 부른다. 중첩함수는 외부함수 내부에서만 호출할 수 있다. 일반적으로 중첩 함수는 자신을 포함하는 외부함수를 돕는 헬퍼 함수의 역할을한다. fuction outer(){ let x= 1; //중첩함수 function inner(){ let y = 2; // 외부함수의 변수를 참조할 수 있다. console.log(x+y); // 3 } inner(); } outer(); 출처 모던 자바스크립트 Deep Dive: 자바스크립트의 기본 개념과 동작 원리 269개의 그림과 원리를 파헤치는 설명으로 ‘자바스크립트의 기본 개념과 동작 원리’를 이해하자! 웹페이지의 단순한 보조 기능을 처리하기 위한 제한..
재귀함수 재귀 함수 함수가 자기 자신을 호출하는 것을 재귀 호출이라 한다. 재귀 함수는 자기 자신을 호출하는 행위, 즉 재귀 호출을 수행하는 함수를 말한다. 재귀함수는 반복되는 처리를 위해 사용한다. 10부터 0까지 출력하는 함수를 구현. function countdown(n){ for(let i = n; i >= 0; i--) console.log(i); } countdown(10); 위의 함수는 문제없이 잘 동작하지만, 반복문 없이도 구현할 수 있는 방법이 바로 재귀함수를 사용하는 것이다. function countdown(n){ if(n
즉시실행함수 즉시실행함수 함수 정의와 동시에 즉시 호출되는 함수를 즉시 실행 함수 라고 한다. 즉시 실행 함수는 단 한 번만 호출되며 다시 호출할 수 없다. (function() { let a = 3; let b = 5; return a * b; }()); 즉시 실행 함수는 함수 이름이 없는 익명 함수를 사용하는 것이 일반적이다. 그룹 연산자 (...) 내의 기명 함수는 함수 선언문이 아니라 함수 리터럴로 평가되며 함수 이름은 함수 몸체에서만 참조할 수 있는 식별자이므로 즉시 실행 함수를 다시 호출할 수는 없다. //기명 즉시 실행 함수 (function foo(){ let a = 3; let b = 5; return a*b; }()); foo(); // ReferenceError: foo is not defined..
스프레드 연산자 1. push() const arr = [ 'fatfish', 'medium' ] arr.push.apply(arr, [ 'JavaScript', 'NodeJs' ]) => arr.push(...[ 'JavaScript', 'NodeJs' ]) console.log(arr) // ['fatfish', 'medium', 'JavaScript', 'NodeJs'] 2. 배열 복사 const arr = [ 'fatfish', 'medium', 'JavaScript', 'NodeJs' ] const copyArr1 = arr.slice(0) // [ 'fatfish', 'medium', 'JavaScript', 'NodeJs' ] => const copyArr2 = [ ...arr ] // [ 'fatfish'..
배열 문자열바꾸기 & 배열 중복 제거하기 문자열바꾸기 replace() 함수 사용 replace() 문자열 함수는 문자열을 취해서, 부분열(substring)을 다른 것으로 바꾸고, 새로운 문자열을 반환합니다. let myText = 'The weather is cold'; let newString = myText.replace('cold', 'warm'); console.log(newString); // "The weather is warm" 배열 중복 제거하기 Set JS에서 Set을 이용하면 중복없는 데이터를 표현할 수 있다. const Arr = [1, 2, 3, 1, 2]; const set = new Set(Arr); //중복제거 const setArr = [...set]; //배열로변환 console.log(setArr); // [..