Hoisting
var
declarations get hoisted to the top of their scope, their assignment does not.const
andlet
declarations are blessed with a new concept called Temporal Dead Zones (TDZ). It's important to know why typeof is no longer safe.14.1
var
선언은 할당이 없이 스코프의 선두에 hoist 됩니다.const
와let
선언은Temporal Dead Zones (TDZ) 라고 불리는 새로운 컨셉의 혜택을 받고 있습니다. 이것은 왜 typeof 는 더이상 안전하지 않은가를 알고있는 것이 중요합니다.// we know this wouldn't work (assuming there // is no notDefined global variable) // (notDefined 가 글로벌변수에 존재하지 않는다고 판정한 경우.) // 잘 동작하지 않습니다. function example() { console.log(notDefined); // => throws a ReferenceError } // creating a variable declaration after you // reference the variable will work due to // variable hoisting. Note: the assignment // value of `true` is not hoisted. // 그 변수를 참조하는 코드의 뒤에서 그 변수를 선언한 경우 // 변수가 hoist 된 상태에서 동작합니다.. // 주의:`true` 라는 값 자체는 hoist 되지 않습니다. function example() { console.log(declaredButNotAssigned); // => undefined var declaredButNotAssigned = true; } // The interpreter is hoisting the variable // declaration to the top of the scope, // which means our example could be rewritten as: // 인터프리터는 변수선언을 스코프의 선두에 hoist 합니다. // 위의 예는 다음과 같이 다시 쓸수 있습니다. function example() { let declaredButNotAssigned; console.log(declaredButNotAssigned); // => undefined declaredButNotAssigned = true; } // using const and let // const 와 let 을 이용한 경우 function example() { console.log(declaredButNotAssigned); // => throws a ReferenceError console.log(typeof declaredButNotAssigned); // => throws a ReferenceError const declaredButNotAssigned = true; }
14.2 Anonymous function expressions hoist their variable name, but not the function assignment.
14.2 무명함수의 경우 함수가 할당되기 전의 변수가 hoist 됩니다.
function example() { console.log(anonymous); // => undefined anonymous(); // => TypeError anonymous is not a function var anonymous = function() { console.log('anonymous function expression'); }; }
14.3 Named function expressions hoist the variable name, not the function name or the function body.
14.3 명명함수의 경우도 똑같이 변수가 hoist 됩니다. 함수명이나 함수본체는 hoist 되지 않습니다.
function example() { console.log(named); // => undefined named(); // => TypeError named is not a function superPower(); // => ReferenceError superPower is not defined var named = function superPower() { console.log('Flying'); }; } // the same is true when the function name // is the same as the variable name. // 함수명과 변수명이 같은 경우도 같은 현상이 발생합니다. function example() { console.log(named); // => undefined named(); // => TypeError named is not a function var named = function named() { console.log('named'); } }
14.4 Function declarations hoist their name and the function body.
14.4 함수선언은 함수명과 함수본체가 hoist 됩니다.
function example() { superPower(); // => Flying function superPower() { console.log('Flying'); } }
'개발 > Javascript' 카테고리의 다른 글
Arrow함수(Arrow Functions) (0) | 2018.03.11 |
---|---|
조건식과 등가식(Comparison Operators & Equality) (0) | 2018.03.11 |
변수(Variables) (0) | 2018.03.11 |
이터레이터와 제너레이터(Iterators and Generators) (0) | 2018.03.11 |
모듈(Modules) (0) | 2018.03.11 |