1장 블록바인딩
var 선언과 호이스팅
var를 이용하여 변수를 선언하면 선언한 위치와 상관없이 함수의 맨 위에 있는것처럼 선언된다 >> 호이스팅
function getValue(isTrue) {
if(isTrue) {
var value = 'blue';
return value;
}
else {
return null;
}
위 코드에서 변수 value는 isTrue가 true일때만 선언된다고 생각하지만 조건의 참/거짓 여부에 상관없이 생성된다.
function getValue(isTrue) {
var value;
if(isTrue) {
value = 'blue';
return value;
} else {
return null;
}
자바스크립트 엔진은 내부적으로 위 코드처럼 변경한다.
value변수의 초기화를 실핸하는 코드는 같은 지점에 남아있고, value 선언은 맨 위로 호이스팅 된다.
만약 else문에서 value값에 접근하면 초기화 되어있지않으므로 undefined값을 가진다.
블록-레벨 선언
주어진 블록 스코프 밖에서는 접근할 수 없는 바인딩을 선언하는 것
let선언 (지역변수 같은 느낌)
let선언은 선언된 블록의 맨 위로 호이스팅되지 않기 때문에, 전체 블록에서 사용할 수 있도록 블록의 첫 부분에 두는 것이 가장 좋음
function getValue(isTrue) {
if(isTrue) {
let value = 'blue';
return value;
}else {
// value는 여기에 존재 ㄴㄴ
return null;
}
// value는 여기에 존재 ㄴㄴ
}
식별자가 특정 스코프 안에 선언되어 있을 경우, 스코프 안에서 let선언으로 재정의 하면 에러 발생
var cnt = 1;
// 1. 에러 발생
let cnt = 0;
// 2. 새 블록 스코프안에 선언 시, 에러 ㄴㄴ
if(isTrue) {
let cnt = 0;
}
const 선언
상수로 간주되며, 한번 설정하면 변경할 수 없다.
선언과 동시에 초기화 해줘야 함
반복문에서 var선언과 let선언
for(var i=0; i<10; i++) {}
console.log(i); // i는 스코프 밖에서도 존재하므로 10 출력
for(let i=0; i<10; i++) {}
console.log(i); // i는 스코프 밖에서 존재하지않으므로 출력XX
Author And Source
이 문제에 관하여(1장 블록바인딩), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@klmjiho/1장-블록바인딩저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)