Javascript

소스코드의 타입 ECMAScript의 사양은 소스코드를 4가지 타입으로 구분한다. 4가지 소스코드들은 실행컨텍스트를 생성한다. 소스코드 타입 설명 전역코드 전역에 존재하는 코드. 전역에 정의된 함수, 클래스 등 내부코드는 포함하지 않음 함수코드 함수 내부에 존재하는 소스코드. 함수 내부에 중첩된 함수, 클래스 등의 내부코드를 포함하지는 않음 eval 코드 빌트인 전역함수인 eval의 인수로 전달되는 코드들 모듈코드 모듈 내부에 존재하는 소스코드들 전역 코드 전역코드는 전역 변수를 관리하기 위해 최상위 스코프인 전역스코프를 생성해야함 또한 var 키워드로 선언된 전역변수와 전역 함수를 전역 객체의 프로퍼티와 메서드로 바인딩하고 참조하기 위해 전역 객체와 연결되어야함 ⇒ 전역 실행 컨텍스트의 생성 함수코드 ..
this 자신이 속한 객체 또는 자신이 생성할 인스턴스를 가리키는 자기참조 변수 함수 호출시 arguments객체와 this가 암묵적으로 함수 내부에 전달됨 this바인딩 호출시에 동적으로 결정됨 strict 모드도 영향을 미침 함수 호출방식과 this바인딩 함수의 상위스코프를 결정하는 방식인 렉시컬 스코프는 함수 정의가 평가되는 시점에 상위스코프를 결정한다. 하지만 this바인딩은 함수 호출 시점에 결정한다. 1. 일반함수 호출 this에 전역객체가 바인딩된다. 이는 중첩함수와 콜백함수도 마찬가지이다. 2. 메서드 호출 메서드 내부의 this는 메서드를 호출한 객체에 바인딩된다. 3. 생성자 함수 호출 생성자 함수 내부의 this에는 생성자 함수가 생성할 인스턴스가 바인딩된다. Function.prot..
자바스크립트 객체의 분류 표준 빌트인 객체모든 실행환경에서 언제나 사용가능함 ECMAScript 사양에 정의된 객체 호스트 객체브라우저에서는 WebAPI, NodeJS에서는 고유의 API를 제공함 실행환경에 따라 다르게 제공되는 객체 사용자 정의 객체 사용자가 직접 정의한 객체 표준 빌트인 객체 String, Number, Boolean, Function, Array, Date 등 원시값과 래퍼 객체 원시값 역시 객체처럼 동작하는데, 원시값을 객체처럼 사용할 경우 JS엔진이 암묵적으로 연관된 객체(래퍼 객체)를 생성하여 생성된 객체로 프로퍼티에 접근하거나 메서드를 호출하고 다시 원시값으로 돌린다. 문자열에 대해 마침표 표기법으로 접근하면, 래퍼객체인 String객체로 인스턴스를 생성하고, 문자열은 래퍼 ..
strict mode란? function foo(){ x=10; } foo(); console.log(x); //10 이런 코드의 경우 x가 전역 객체에 등록되어 선언하지도 않았는데도 불구하고 등록이 된다. 이를 암묵적 전역이라 한다. 이런 현상을 방지하기 위해 strict mode가 추가되었다.(ES5부터) strict mode의 적용 사용하려면 전역의 선두 또는 함수 몸체에 ‘use strict’;를 추가한다. 전역의 선두에 하면 전체에 적용된다. 'use strict'; function foo(){ x=10; //Error } foo(); 함수의 선두에도 사용가능하다. function foo(){ 'use strict'; x=10; //Error } foo(); 전역에 strict mode적용을 피..
일급객체 무명의 리터럴로 생성가능 → 런타임에 생성 가능 변수나 자료구조에 저장할 수 있음 함수의 매개변수에 전달할 수 있음 함수의 반환값으로 사용 가능함 함수와 객체를 동일하게 사용할 수 있음 즉, 함수는 값을 사용하는 곳에는 어디든 리터럴로 정의할 수 있고, 이를 런타임에 함수객체로 평가하게 됨 가장 큰 특징 매개변수에 전달할 수 있음 함수의 반환값으로 사용가능 함수 객체의 프로퍼티 Object.getOwnPropertyDescriptors(f); {length: {…}, name: {…}, arguments: {…}, caller: {…}, prototype: {…}} arguments: {value: null, writable: false, enumerable: false, configurable..
일급객체 무명의 리터럴로 생성가능 → 런타임에 생성 가능 변수나 자료구조에 저장할 수 있음 함수의 매개변수에 전달할 수 있음 함수의 반환값으로 사용 가능함 함수와 객체를 동일하게 사용할 수 있음 즉, 함수는 값을 사용하는 곳에는 어디든 리터럴로 정의할 수 있고, 이를 런타임에 함수객체로 평가하게 됨 가장 큰 특징 매개변수에 전달할 수 있음 함수의 반환값으로 사용가능 함수 객체의 프로퍼티 Object.getOwnPropertyDescriptors(f); {length: {…}, name: {…}, arguments: {…}, caller: {…}, prototype: {…}} arguments: {value: null, writable: false, enumerable: false, configurable..
Object 생성자 함수 new와 Object 생성자 함수를 호출하면 빈 객체를 생성하여 반환한다. 빈 객체를 생성한 후에 프로퍼티나 메서드를 추가하여 완성할 수 있다. Object 외에도 String, Number, Boolean, Function, Array, Date, RegExp, Promise 등의 빌트인 생성자 함수를 제공한다. 생성자 함수 객체 리터럴로 객체 생성하는 것의 문제점 하나의 객체만 생성하므로 동일한 프로퍼티를 갖는 객체를 여러개 갖는 경우 매번 같은 프로퍼티를 기술하기 때문에 비효율적이다. 생성자 함수에 의한 객체 생성 방식의 장점 프로퍼티, 메서드 구조가 같은 객체 여러개를 간편하게 생성할 수 있다. function Circle(radius){ this.radius=radius..
var 키워드로 선언한 변수의 문제점 변수 중복 선언 허용 var x=1; var y =1; var x=100; var y; console.log(x); //100 console.log(y); //1 함수 레벨 스코프 var 키워드로 선언한 변수는 오로지 함수의 코드블록만을 지역스코프로 인정한다. 함수 외부에서 var 키워드를 선언하면 코드 블록 내에서 선언해도 모두 전역 변수가 된다. var x=1; if(true){ var x=10; } console.log(x); //10 변수 호이스팅 var 키워드로 변수를 선언하면 변수 호이스팅에 의해 변수 선언문이 스코프의 선두로 끌어올려져서 동작한다. 따라서 할당문 이전에 참조가 가능하며, undefined를 반환한다. 이런 코드가 문제 없이 작동하게 된다...
변수의 생명주기 ⇒ 메모리 공간이 확보된 시점부터 메모리 공간이 해제되어 가용 메모리 풀에 반환되는 시점까지 지역변수의 생명주기 변수는 생명주기가 있다. 변수는 자신이 선언된 위치에서 생성되고 소멸한다. 함수 내부 지역변수는 함수가 호출되면 생성되고, 종료되면 소멸하게 된다. → 지역변수의 생명주기는 함수의 생명주기(해당 스코프의 생명주기)와 일치한다. 해당 스코프와 변수가 외부에서 참조되는 경우는 스코프는 소멸하지 않고 생존하게 된다. 전역변수는 어플리케이션과 동일한 생명주기를 갖는다. 또한, 호이스팅은 스코프 단위로 동작한다. var x = "global"; function foo(){ console.log(x); //undefined var x = "local"; } foo(); console.lo..
스코프 식별자가 유효한 범위 식별자는 자신이 선언된 위치에 의해 자신이 유효한 범위, 즉 다른 코드가 식별자 자신을 참조할 수 있는 범위가 결정된다. 렉시컬 환경 코드가 어디서 실행되며 주변에 어떤 코드가 있는가? 코드의 문맥(context)는 렉시컬 환경으로 이뤄진다. 이를 구현한 것이 실행컨텍스트로, 모든 코드는 실행 컨텍스트에서 평가되고 실행된다. 네임스페이스 스코프는 네임스페이스이다. 식별자의 이름은 스코프 내에서 유일해야한다. 즉, 다른 스코프에서는 동일한 이름의 식별자를 사용할 수 있다. var x='global'; function foo(){ var x='local'; console.log(x); } foo(); 전역 컨텍스트와 foo의 실행컨텍스트가 달라 이름이 동일한 식별자인 x에 대해 ..
_0422
'Javascript' 태그의 글 목록 (3 Page)