반응형
반응형
프로퍼티 어트리 뷰트를 이해하기위해 내부 슬롯 과 내부 메소드의 개념을 알아보자 내부 슬롯과 내부 메서드 내부 슬롯과 내부 메서드는 자바스크립트 엔진의 구현 알고리즘을 설명하기위해 ECMAScript 사양에서 사용하는 의사 프로퍼티 와 의사 메서드 이다. [[]] 이중대괄호 로 감싼 이름들이 내부 슬롯과 내부 메서드 이다. 자바스크립트 엔진 내부 로직이므로 원칙적으로 자바스크립트는 내부 슬롯과 내부 메서드에 직접 접근하거나 호출할수있는 방법을 제공하지 않는다. 단 일부 내부 슬롯과 내부 메서드에 한하여 간접적으로 접근할수있는 수단이 제공된다. 예를 들어 모든 객체를 [[prototype]]이라는 내부 슬롯을 갖는데 __proto__ 를 통해 간접적으로 접근할수있다. const { prototype } =..
var 변수의 문제점 변수 중복 선언 허용 var 키워드로 선언한 변수는 중복 선언이 가능하다 var x = 1; var y = 1; // 같은 스코프 내에 중복 선언을 허용한다. // 초기화문이 있는 변수선언문은 var 키워드가 없는 것처럼 동작한다. var x = 100; // 초기화 문이 없는 변수 선언문은 무시된다. var y; console.log(x); // 100 console.log(y); //1 함수 레벨 스코프 var 키워드로 선언한 변수는 함수의 코드 블록만을 지역스코프로 인정하는데 외부에서 var 키워드로 선언한 변수는 코드 블록 내에서 선언해도 모두 전역 변수처리가 된다. var x = 1; if (true) { // x는 전역 변수이다. 이미선언된 x 가 있으므로 중복선언된다. ..
전역변수 전역변수를 선언한 의도는 코드 어디서든 참조하고 할당할수있는 변수로 사용하겠다는 의미인데 이는 모든코드가 전역 변수를 참조하고 변경할 수 있는 암묵적 결합을 허용하는것이다. 즉 해당 코드가 끝날때까지 생명주기가 이어진다. 또한 스코프 체인상 가장 종점에 위치해있기때문에 검색속도가 가장 느리다. (물론 차이는 그렇게 크진않다) 전역변수의 사용을 억제하는방법 즉시 실행 함수 함수 정의와 동시에 호출되는 즉시실행함수는 한번만 호출된다. 이런특성을 이용해 전역변수의 사용을 제한하는 방법이다. (function () { var foo = 10; // 즉시 실행 함수의 지역 변수 스코프 }()); 네임스페이스 객체 전역에 네임스페이스 역할을 담당할 객체를 생성하고 전역 변수처럼 사용하고싶은 변수를 프로퍼티..
📍13장 스코프 스코프 모든 식별자는 자신이 선언된 위치에 의해 다른 코드가 자신을 참조할수이쓴ㄴ 유효 범위가 결정되는데 이를 스코프 라고 한다. 스코프의 종류 전역 스코프 지역스코프 전역스코프 전역스코프는 코드의 가장 바깥 영역을 말한다. 전역에 변수를 선언하면 전연스코프를 갖는 전역변수가 되는데 전역 변수는 어디든지 참조 가 가능하다. 지역스코프 지역은 함수 몸체 내부를 말하는데 지역에서 변수를 선언하면 해당 변수는 지역스코프를 갖게된다. 즉 함수내부에서만 참조할수있다. 스코프 체인 중첩함수에서 스코프는 계층적으로 존재하게되는데 전역 > 함수 > 중첩함수 스코프 가 계층적으로 연결된것을 스코프 체인이라고한다. 변수를 참조할때 자바스크립트 엔진은 스코프 체인을 통해 변수를 참조하는 코드의 스코프에서 시..
📍12장 함수 -2 참조의 의한 전달과 외부 상태의 변경 원시값은 값에 의한 전달 이고 객체는 참조에 의한 전달방식으로 동작한다. 매개변수또한 타입에따라 동일하게 동작하기때문에 매개변수에 원시값을 전달받을때는 값자체가 복사되어 전달되어 함수내부에서 변경을해도 외부원시값을 가지고있는 변수에는 아무런 영향이 없다. 다만 객체를 전달받을때는 참조 값이 전달되기때문에 해당 함수에서 변경하면 외부 객체에도 영향이 간다. function changeVal(primitive, obj) { primitive += 100; obj.name = "kim"; } //외부 값 let num = 100; let person = { name: "Lee" }; console.log(num); // 100 console.log(pe..
함수정의 함수를 정의하는 방법은 4가지 가 있다. 함수 선언문 함수 표현식 function 생정자 함수 화살표 함수 함수선언문 function add (x,y) { return x + y; } 함수 리터럴과 유사하지만 선언문은 함수 이름을 생략할수없고 리터럴은 생략할수있다. 또 함수 선언문은 표현식이 아닌 문으로 변수에 할당할수 없다 하지만 아래코드를 보면 의문점이 생기는데 let add = function add (x,y) { return x + y ; } console.log(add(2,5)); // 7 함수 선언문이 변수에 할당되는것처럼 보이는데 이렇게 동작하는 이유는 자바스크립트 엔진이 코드의 문맥에 따라 함수 리터럴 이나 함수 선언문으로 해석하는 경우가있기때문인데 간단하게 함수리터럴을 단독으로 ..