728x90 JAVASCRIPT50 [JS][함수 vs 블록 스코프] 스코프 역할을 하는 함수 스코프 역할을 하는 함수 지금가지 코드를 함수로 감싸 내부에 변수나 함수 선언문을 바깥 스코프로부터 함수의 스코프 안에 '숨기는' 것을 살펴보았다. var a = 2; function foo() { var a = 3; console.log(a); // 3 } foo(); console.log(a); // 2 이 방식은 작동하기는 하지만, 결코 이상적인 방식은 아니다. 이 방식에는 몇가지 문제가 있다. 첫째, foo()라는 이름의 함수르 선언해야 한다. 즉, foo라는 확인자 이름으로 둘러싸인 스코프를 '오염시킨다'는 의미다. 또한, 그 함수를 직접 이름으로 호출해야만 실제 감싼 코드를 실행할 수 있다. 함수를 이름없이 선언하고 자동으로 실행된다면 더 이상적일 것이다. 다행이도 자바스크립트에서는 두 가지 .. 2022. 2. 16. [JS][함수 vs 블록 스코프] 일반 스코프에 숨기 일반 스코프에 숨기 함수에 대한 전통적인 개념은 이렇다. 함수를 선언하고 그 안에 코드를 넣는다. 바꿔 생각해보는 것도 꽤 유용하다. 작성한 코드에서 임의 부분을 함수 선언문으로 감싼다. 이는 해당 코드를 '숨기는'효과를 낸다. 이렇게 하면 해당 코드 주위에 새로운 스코프 버블이 생ㅅ어된다. 즉, 감싸진 코드 안에 있는 '모든 변수' 또는 '함수 선언문'은 이전 코드에 포함됐던 스코프가 아니라 새ㅇ로이 코드를 감싼 함수의 스코프에 묶인다. 달리 말하면, 함수의 스코프로 둘러싸서 변수와함수를 '숨길' 수 있다는 말이다. 그렇다면 코드를 '숨기는'테크닉은 어디에 유용할까? 스코프를 이용해 숨기는 방식을 사용하는 이유는 여러 가지가 있는데, 소프트웨어 디자인 원칙인 '최소 권한의 원칙'과 관련이 있다. 이 원.. 2022. 2. 16. [JS][함수 vs 블록 스코프] 함수 기반 스코프 함수 vs 블록 스코프 앞에서 살펴 본 것처럼 스코프는 컨테이너 또는 바구니 구실을 하는 일련의 '버블'이고 변수나 함수 같은 확인자가 그 안에서 선언된다. 이 버블은 경계가 분명하게 중첩되고, 그 경계는 개발자가 코드를 작성할 때 결정된다. 그렇다면 정확히 어떤 것이 새로운 버블을 만들까? 함수만 버블을 만들까? 자바스크립트의 다른 자료 구조는 스코프 버블을 생성하지 못할가? 함수 기반 스코프 앞의 질문에 대한 가장 일반적인 답변은 자바스크립트가 함수 기반 스코프르 사용하기 때문이라는 것이다. 즉, 각각의 선언된 함수는 저마다의 버블을 생성하지만 다른 어떤 자료 구조도 자체적인 스코프를 생성하지 않는다는 것이다. 물론 사실은 아니다. 먼저 함수 스코프와 그 암시적 용례를 살펴보자. function fo.. 2022. 2. 16. [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][스코프] 스코프 이해하기 스코프 이해하기 스코프를 좀더 재미있고 쉽게 설명하기 위해 대화 형식으로 스코프를 보자. 먼저 등장 인물을 살펴보자. 출연진 프로그램 "var a = 2;"를 처리할 주역들을 만나보자. 그래야 나중에 들을 대화를 이해할 수 있다. 엔진 : 컴파일레이션의 시작부터 끝까지 전 과정과 자바스크립트 프로그램 실행을 책임진다. 컴파일러 : 엔진의 친구로, 파싱과 코드 생성의 모든 잡일을 도맡아 한다. 스코프 : 엔진의 또 다른 친구로, 선언된 모든 확인자(변수) 검색 목록을 작성하고 유지한다. 또한, 엄결한 규칙을 강제하여 현재 실행 코드에서 화인자의 적용 방식을 정한다. 만약 자바스크립트가 어떻게작동하는지 완전히 이해한다면 엔진처럼 생각해보자. 그들이 던지는 질문을 던지고 그들과 똑같이 답해보자. 앞과 뒤 프로.. 2022. 2. 15. 이전 1 2 3 4 5 ··· 9 다음 728x90