본문 바로가기

javascript

(12)
TDZ(Temporal Dead Zone) let / const 는 호이스팅이 일어나지 않는다고 알고 있었는데 유투브 강의 보다가 TDZ에 대해서 찾아보다가 let / const도 호이스팅이 일어난다는 걸 알게 됐다. 일단 Javascript에서 변수는 선언, 초기화, 할당 이라는 3가지 단계로 생성이 된다고 한다. var는 선언과 초기화를 동시에 진행하고 let / const는 선언과 초기화가 분리되어 진행된다. var는 선언되고 undefined로 바로 초기화가 된다. 변수가 선언되어 실행컨텍스트에 변수객체에 등록되고 선언된 변수가 초기화 까지 되어 메모리에 할당이 되어야 변수에 접근이 가능하다. 그래서 실행 컨텍스트 안에서 호이스팅으로 인해 변수가 선언될 때 var는 선언과 undefined로 초기화가 동시에 진행되기 때문에 선언하기 전에 ..
this 책을 사둔지는 오래인데.. 아직 반도 못읽어서.. 처음부터 다시 정리하면서 읽어야 겠다..ㅎㅎ You don't know JS - this와 객체 프로토타입, 비동기와 성능 1장 자기 자신?? function foo(num) { console.log(`foo: ${num}`); this.count++; } foo.count = 0; var i; for(i=0; i 5) { foo(i); } } console.log(foo.count) // 0 this는 함수 그 자체를 가리킨다?? 이건 많이 하는 오해이다. 위 예시 코드를 보면 foo 함수가 실행 될 때 마다 함수 안에 this.count를 증가시킨다. 그리고 나서 몇 번 호출하고 난 결과는 0이다. foo.count 와 foo 함수 안에 this.co..
함수 전달인자와 매개변수 함수의 전달인자와 매개변수에 대해 알아보겠습니다. 자바스크립트에서는 함수 정의 시 함수 매개변수의 자료형과 함수 호출 시의 전달하는 인자 값의 자료형을 검사하지 않습니다.심지어 전달인자의 개수도 검사하지 않습니다. 생략 가능한 매개변수 함수 호출 시 본래 정의된 것보다 적은 수의 전달인자가 전달되면 나머지 매개변수는 undefined로 설정됩니다. 1234567function getPropertyNames(o, /*optional*/ a) { if ( a=== undefined ) a = []; //a에 대한 전달인자가 없을 때 새로 배열로 초기화 for(var property in o) a.push(property); return a;}var a = getPropertyNames(o); // 이 경우 ..
기타 연산자들 조건부 연산자 ( 삼항연산자 ) 조건부 연산자의 피연산자에는 어떤 타입도 올 수 있습니다. 첫 번재 피연산자는 불리언 값으로 평가됩니다.첫 번째 피연산자 값이 true로 평가되면 두 번째 피연산자가 평가되고, 그 값이 반환됩니다. 만약 첫 번째 피연산자 값이 false로 평가되면 세 번재 피연산자가 평가되고, 그 값이 반환됩니다. 123456function abs(x) { return x > 0 ? x : -x // 절대 값을 구함.} abs(1) // 1abs(-1) // 1cs if문을 사용해서 비슷한 결과를 얻을 수 있지만 좀 더 편리하고 간결한 문법을 제공합니다. 12345var userName = 'gaheeCho'; var greeting = "hello " + (userName ? userN..
평가 표현식 전역함수 eval() 문자열을 자바스크립트 코드로 해석하고 이를 평가한 결과를 값으로 출력합니다. 문자열 소스 코드를 동적으로 평가하는 기능은 매우 강력하지만 실제로는 거의 사용되지 않는다고 합니다.그리고 eval을 사용하면 eval( )이 평가하는 코드를 분석할 수 없어 자바스크립트 인터프리터가 미리 최적화를 할 수 없다고 합니다. eval()함수는 단 하나의 전달인자를 갖습니다. 전달인자로 문자열이 아닌 값을 전달하면 단순히 넘긴 값을 반환합니다. 전달인자로 문자열을 전달하면 문자열을 자바스클립트 코드로 해석합니다. 이때 해석하지 못하면 SyntaxError가 발생합니다. 전달인자로 넘긴 문자열이 자바스크립트 코드로 올바르게 해석될 경우에는, 코드를 평가한 다음에 코드에 포함된 마지막 표현식 또는 구..
변수 선언 변수 선언 자바스크립트에서는 변수를 사용하기 전에 변수 선언(declaration)을 해야 한다. 변수는 다음과 같이 var 키워드를 이용하여 선언한다. 12var i;var sum;cs var 키워드를 이용하여 여러 개의 변수를 선언할 수도 있다. 1var i, sumcs 그리고 변수 선언과 동시에 초기화를 할 수도 있다. 123var message = "hello"; var i = 0, j = 0, k = 0;cs var문에서 변수에 초기 값을 지정하지 않는다면, 변수는 값이 설정될 때까지 undefined값을 갖게 된다. 123var a; console.log(a); // undefinedcs var문은 for와 for/in 루프 안에 올 수도 있다. 이를 통해 루프 문법 안에서 루프 변수(loop..
기본 표현식 가장 간단한 형태의 표현식다른 표현식을 포함하지 않은 독립적 표현식자바스크립트에서 기본 표현식은 상수나 리터럴 값, 특정 키워드들 그리고 변수 참조를 말한다. 리터럴 12345120.12.33'hello'/pattern/cs 예약어 12345true // 불리언 true false // 불리언 false 값null // null 값this // '현재' 객체 cs this는 다른 키워드와 다르게 프로그램안에서 위치에 따라 각기 다른 값으로 평가된다. 변수 1234i // 변수 i의 값으로 평가된다.sum // 변수 sum의 값으로 평가된다.undefined // undefined는 전역 변수로 null 처럼 키워드가 아니다. Colored by Color Scriptercs 자바스크립트에서는 프로그램 안..
변수의 유효범위 변수의 유효범위란? 프로그램에서 어떤 변수가 정의되어 있는 영역. 전역변수(global variable) 이름 그대로 유효범위가 전역적자바스크립트 코드 전체에 걸쳐 정의되어 있다. 지역변수(local variable) 어떤 함수 안에서 선언된 변수오직 해당 함수 몸체 안에서만 정의되어 있다. 지역변수가 전역변수와 같은 이름을 갖는 경우에는 함수 내부에서 지역변수가 우선!전역 유효범위에서 var를 사용하지 않고 전역 변수를 선언할 수 있지만, 지역변수는 반드시 var를 사용해야한다. 전역변수로 선언하지 않은 변수를 var 없이 함수안에서 선언하면 전역변수로 자동 선언된다! 123456789101112scope = 'global'; function checkScope2() { scope = 'local'; ..