본문 바로가기
728x90

javascript38

[JS][렉시컬 스코프] 검색 렉시컬 스코프 '스코프'를 엔진이 확인자 이름으로 현재 스코프 또는 중첩 스코프 내에서 변수를 찾을 때 사용하는 '규칙의 집합'이라고 정의했다. 스코프는 두 가지 방식으로 작동한다. 첫 번재 방식은 다른 방식보다 훨씬 더 일반적이고 다수의 프로그래밍 언어가 사용하는 방식이다. 이 방식을 '렉시컬 스코프'라고 부른다. 두 번째 방식은 Bash Scripting이나 Perl의 일부 모드와 같음 몇몇 언어에서 사용하는 방식으로 '동적 스코프'라고 부른다. 렉스타임 일반적인 언어의 컴파일러는 첫 단꼐를 전통적으로 토크나이징 또는 렉싱이라 불리는 작업으로 시작한다. 렉싱 처리 과정에서는 소스코드 문자열을 분석하여 상태유지 파싱의 결과로 생성된 토큰에 의미를 부여한다. 바로 이 개념이 렉시컬 스코프가 무엇인지, 어.. 2022. 2. 15.
[JS][스코프] 중첩 스코프 와 오류, 정리하기 중첩 스코프 스코프는 확인자 이름으로 변수를 찾기 위한 규칙의 집합이라고 앞서 말한 바 있다. 그러나 대개 고려해야할 스코프는 여러개다. 하나의 블록이나 함수는 다른 블록이나 함수안에 중첩될 수있으므로 스코프도 다른 스코프안에 중첩될 수있다. 따라서 대상 변수를 현재 스코프에서 발견하지 못하면 엔진은 다음 바깥의 스코프로 넘어가는 식으로 변수를 ㅊ자거나 글로벌 스코프라 부르는 가장 바깥 스코프에 도달할 때까지 계속한다. function foo(a) { console.log(a + b); } var b = 2; foo(2); // 4 b에 대한 RHS 참조는 함수 foo안에서 처리할 수 없고, 함수를 포함하는 스코프에서 처리한다. 엔진과 스코프의 대화를 다시보자. 엔진 : 이봐 foo 스코프, b에 대해 .. 2022. 2. 15.
[JS][스코프] 스코프란? 스코프란 무엇인가 프그래밍 언어의 기본 패러다임중 하나는 변수에 값을 저장하고 값을 가져다 쓰고 수정하는 것이다. 이 기능은 프로그램에서 상태를 나타낼 수 있게 해준다. 이와 같은 개념이 없다면 프로그램은 상당히 제한적이고 지극히 심심한 작업만 할 수 있을 것이다. 그러나 변수를 프로그램에 추가하면 다음과 같은 재미있는 질문이 생긴다. 변수는 어디에 살아있는가? 다른 말로 하면 변수는 어디에 저장되는가? 필요할 때 프로그램은 어떻게 변수를 찾는가? 이 질문을 통해 알 수 있는 것은 특정 장소에 변수를 저장하고 나중에 그변수를 찾는 데는 잘 정의된 규칙이 필요하다는 점이다. 바로 이런 규칙을 '스코프'라고 한다. 그렇다면 스코프 규칙은 어디서 어떻게 정의될까? 컴파일러 이론 여러 언어를 다루어 봤다면 자명.. 2022. 2. 15.
[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][문법] 문과 표현식 문법 자바스크립트 언어에서 구문이 어떻게 작동하는지 알아보자. 자바스크립트 코딩 실력을 자신하는 사람도 자바스클비트 언어의 문법은 어려워한다. 온갖 혼란과 오해의 늪에 빠지게 할, 별별 미묘한 것들로 가득차 있어서다. 자, 이런 것들을 확실히 끄집어내어 그간 우리가 잘못 알아온 것들을 말끔히 정리하자. 문과 표현식 문과 표현식을 대충 같은 의미라고 넘겨버리는 개발자가 허다하다. 그러나 자바스크립트에서 두 용어는 아주 중요한 차이가 있으므로 명확하게 분별하자. 문장은 생각을 표현하는 단어들의 완전한 조형물이다. 문장은 하나 이상의 어구로 구성되며 각 어구는 구두점이나 접속사로 연결할 수 있고 어구는 더 작은 어구로 나눌 수있다. 어던 어구는 불완전하여 그 자체로 완성된 문장을 형성할 수 없지만 스스로의 힘.. 2022. 2. 13.
[JS][강제변환] 동등비교 : 희귀 사례 (1) 희귀 사례 지금까지 느슨한 동등 비교 == 이면의 암시적 강제변환에 대해 아주 자세히 살펴보았다. 이제는 우리가 강제변환 버그를 피해가도록 하기 위해서, 그중에서도 가장 골치 아프고 쓰지 알아야할 희귀 사례를 보자 먼저 내장 네이티브 프로토타입을 변경하면 어떤 참사가 빚어지는지 살펴보자. 알박힌 숫자 값 Number.prototype.valueOf = function () { return 3; }; new Number(2) == 3; // true 2 === 3 비교는 이 예와 무관하다. 2, 3이 둘 다 이미 원시 숫자 값이고 곧바로 비교가 가능하므로 Number.prototype.valueOf() 내장 메서드는 호출되지 않는다. 그러나 new Number(2)는 무조건 ToPrimitive 강제변환 .. 2022. 2. 12.
728x90