728x90 분류 전체보기89 [JS][함수 vs 블록 스코프] 스코프 역할을 하는 블록 스코프 역할을 하는 블록 함수가 가장 일반적인 스코프 단위이자 현재 자바스크립트에서 통용되는 가장 널리 퍼진 디자인 접근법이기는 하지만, 다른 스코프 단위도 존재하고 이를 이용하면 더 좋은 깔끔한 코드를 작성할 수 있다. 자바스크립트를 제외하고도 많은 언어가 블록 스코프를 지원한다. 그래서 다른 언어를 사용하던 개발자들은 블록 스코프라는 개념에 익숙하지만, 자바스크립트만을 써왔던 개발자에게는 이개념이 약간은 어색할 수 있다. 그러나 아직 블록 스코프 방식으로 한 줄도 코딩해 본 적이 없더라도 다음과 같은 자바스크립트 코드는 매우 익숙할 것이다. for (var i = 0; i < 10; i++) { console.log(i); } 변수 i를 for반복문의 시작부에 선언하는 이유는 보통 i를 오직 for반.. 2022. 2. 17. [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][렉시컬 스코프] 렉시컬 속이기 렉시컬 속이기 렉시컬 스코프는 개발자가 작성할 대 함수를 어디에 선언했는지에 따라 결정된다. 그렇다면 런타임 때 어떻게 레깃컬 스코프를 수정할 수 있을까? 자바스크립트에서는 렉시컬 스코프를 속일 수 있는 두 가지 방법이 있따. 두방법 모두 개발자 커뮤니티에서는 코드를 작성할 때 권장하지 않는 방법이다. 그러나 ㅁ ㅏㄴㅎ은 사람이 이런 방법을 비판하지만, 가장 중요한 논점을 빠트린다. 바로 렉시컬 스코프를 속이는 방법은 성능을 떨어뜨린다는 점이다. 성능 문제를 설명하기 전에 앞서 말한 두 가지 방법이 어떻게 작동하는지 알아보자. eval 자바스크립트의 eval() 함수는 문자열을 인자로 받아들여 실행 시점에 문자열의 내용을 코드의 일부분처럼 처히한다. 즉, 처음 작성한 코드에 프로그램에서 생성한 코드를 집.. 2022. 2. 16. [JS][렉시컬 스코프] 검색 렉시컬 스코프 '스코프'를 엔진이 확인자 이름으로 현재 스코프 또는 중첩 스코프 내에서 변수를 찾을 때 사용하는 '규칙의 집합'이라고 정의했다. 스코프는 두 가지 방식으로 작동한다. 첫 번재 방식은 다른 방식보다 훨씬 더 일반적이고 다수의 프로그래밍 언어가 사용하는 방식이다. 이 방식을 '렉시컬 스코프'라고 부른다. 두 번째 방식은 Bash Scripting이나 Perl의 일부 모드와 같음 몇몇 언어에서 사용하는 방식으로 '동적 스코프'라고 부른다. 렉스타임 일반적인 언어의 컴파일러는 첫 단꼐를 전통적으로 토크나이징 또는 렉싱이라 불리는 작업으로 시작한다. 렉싱 처리 과정에서는 소스코드 문자열을 분석하여 상태유지 파싱의 결과로 생성된 토큰에 의미를 부여한다. 바로 이 개념이 렉시컬 스코프가 무엇인지, 어.. 2022. 2. 15. 이전 1 ··· 3 4 5 6 7 8 9 ··· 15 다음 728x90