본문 바로가기
728x90

JAVASCRIPT50

[JS][스코프] 스코프란? 스코프란 무엇인가 프그래밍 언어의 기본 패러다임중 하나는 변수에 값을 저장하고 값을 가져다 쓰고 수정하는 것이다. 이 기능은 프로그램에서 상태를 나타낼 수 있게 해준다. 이와 같은 개념이 없다면 프로그램은 상당히 제한적이고 지극히 심심한 작업만 할 수 있을 것이다. 그러나 변수를 프로그램에 추가하면 다음과 같은 재미있는 질문이 생긴다. 변수는 어디에 살아있는가? 다른 말로 하면 변수는 어디에 저장되는가? 필요할 때 프로그램은 어떻게 변수를 찾는가? 이 질문을 통해 알 수 있는 것은 특정 장소에 변수를 저장하고 나중에 그변수를 찾는 데는 잘 정의된 규칙이 필요하다는 점이다. 바로 이런 규칙을 '스코프'라고 한다. 그렇다면 스코프 규칙은 어디서 어떻게 정의될까? 컴파일러 이론 여러 언어를 다루어 봤다면 자명.. 2022. 2. 15.
[JS][문법] Switch switch if ... else if ... else 문의 사슬을 짧게 해주는 switch 문을 간략히 살펴보자. switch (a) { case 2: // .. break; case 42: // .. break; default: // ... } 보다시피 switch 표현식의 평가 결과를 각 case 표현식의 값들과 매치한다. 죽 내려가다 매치된 case 절의 코드를 실행하기 시작하여 break 문을 만나기 전이나 switch 블록의 끝까지 계속 나아간다. 여기까진 지나치게 평범하지만 switch에는 우리가 몰랐을 기벽이 있다. 첫째, switch 표현식과 case 표현식 간의 매칭 과정은 === 알고리즘과 똑같다. 예제처럼 case 문에 확실한 값이 명시된 경우라면 엄격한 매치가 적절하다. 그러나 강.. 2022. 2. 14.
[JS][문법] 연산자 우선순위 연산자 우선순위 자바스크립트에서 &&, || 연산자는 단순히 true/false를 반환하는게 아니라, 독특하게도 피연산자 중 하나를 선택하여 반환한다. 그나마 피연산자가 2개뿐이고 연산자가 하나밖에 없을 경우는 결괏값을 쉽게 예상할 수 있다. 하지만 연산자가 2개, 3개 이상이라면? var a = 42; var b = "foo"; var c = [1, 2, 3]; a && b || c; a || b && c; 두 표현식의 결과를 이해하려면 표현식에 연산자가 여러 개 있을 경우 어떤 규칙으로 처리되는 지 알아야 한다. 바로 이 규칙을 '연산자 우선순위'라고 한다. 앞에서 한번 봤던 예제다. var a = 42, b; b = (a++, a); a; // 43 b; // 43 ()를 없애면 어떻게 될까? b는.. 2022. 2. 14.
[JS][문법] 콘텍스트 규칙 콘텍스트 규칙 자바스크립트 문법 규칙 중에는 같은 문구지만 어디에서 어떤 식으로 사용하느냐에 따라 서로 다른 의미를 가지는 경우가 있다. 하나씩 떨어뜨려 놓고 보면 상당히 헷갈릴 수 있다. 중괄호 자바스크립트에서 중괄호가 나올 법한 곳은 크게 두 군데이다. 객체 리터럴 첫째 객체 리터럴이다. var a = { foo: bar(), }; {}는 a에 할당될 값이므로 객체 리터럴이 맞다. 레이블 방금 전 코드에서 var a = 부분을 삭제하면 어떻게 될까? { foo: bar(); } {}는 어디에도 할당되지 않은, 그저 고립된 객체 리터럴 처럼 보인다. 하지만 전혀 그렇지 않다. 여기서의 {}은 평범하 코드 블록이다. 혼자 떨어져 있는 모양세가자바스크립트에서는 그리 자연스럽지 않지만, 문법적으로는 100%.. 2022. 2. 14.
[JS][문법] 표현식의 부수 효과 표현식의 부수 효과 대부분의 표현식에는 부수 효과가 없다. 예컨데, var a = 2; var b = a + 3; 표현식 a + 3 자체는 가령 a값을 바꾸는 등의 부수효과가 전혀 없다. 단지 b = a + 3문제서 결괏값 5가 b에 할당될 뿐이다. 다음의 함수 호출 표현식은 부수효과를 가진 표현식의 전형적인 예다. function foo() { a = a + 1; } var a = 1; foo(); // 결괏값 : undefined, 부수 효과 : a가 변경됨 다른 부수 효과를 지닌 표현식을 보자. var a = 42; var b = a++; 표현식 a++이 하는 일은 두 가지다. a의 현재 값 42를 반환하고 a값을 1만큼 증가시킨다. var a = 42; var b = a++; a; // 43 b;.. 2022. 2. 13.
[JS][문법] 문과 표현식 문법 자바스크립트 언어에서 구문이 어떻게 작동하는지 알아보자. 자바스크립트 코딩 실력을 자신하는 사람도 자바스클비트 언어의 문법은 어려워한다. 온갖 혼란과 오해의 늪에 빠지게 할, 별별 미묘한 것들로 가득차 있어서다. 자, 이런 것들을 확실히 끄집어내어 그간 우리가 잘못 알아온 것들을 말끔히 정리하자. 문과 표현식 문과 표현식을 대충 같은 의미라고 넘겨버리는 개발자가 허다하다. 그러나 자바스크립트에서 두 용어는 아주 중요한 차이가 있으므로 명확하게 분별하자. 문장은 생각을 표현하는 단어들의 완전한 조형물이다. 문장은 하나 이상의 어구로 구성되며 각 어구는 구두점이나 접속사로 연결할 수 있고 어구는 더 작은 어구로 나눌 수있다. 어던 어구는 불완전하여 그 자체로 완성된 문장을 형성할 수 없지만 스스로의 힘.. 2022. 2. 13.
728x90