Closed jum0 closed 3 years ago
함수 내부에서 변수를 선언한 경우
함수 내부에서 선언된 변수는 함수 내부에서만 접근이 가능
var variable = 1 function functionScopeTest() { if (true) { var inCondition = 2 } console.log(inCondition) } functionScopeTest()
변수 inCondition의 범위는 함수 단위
inCondition
자바스크립트는 기본적으로 함수를 범위로 함
let 과 const 키워드를 사용할 경우, 블록 범위를 가짐
let
const
function usingVarKeyword() { for(var i = 0; i < 3; i++) {} console.log(i) } function usingLetKeyword() { for(let i = 0; i < 3; i++) {} console.log(i) } usingVarKeyword() // 3 usingLetKeyword() // error
스코프는 함수를 호출할 때가 아니라 선언(정의)할 때 생김
var x = 1; function foo() { var x = 10; bar(); } function bar() { console.log(x); } foo(); bar();
끌어올리기, 들어 올려 나르기
함수 호이스팅
hoistingTest() function hoistingTest() { var x = 1 console.log(x) }
변수 호이스팅
function hoistingTest() { console.log(x) var x = 1 console.log(x) } hoistingTest()
function add(x, y) { return x + y; }
호이스팅에 영향 받음
var add = function(x, y) { return x + y; }
호이스팅에 영향을 받지 않음
참조
https://alstn2468.github.io/Javascript/2020-05-13-FunctionScope_BlockScope_and_LexicalScope/
모던 자바스크립트 Deep Dive
https://joshua1988.github.io/web-development/javascript/function-expressions-vs-declarations/
<보충할 부분>
함수 범위, 블록 범위, 렉시컬(Lexical) 범위
범위(Scope)란?
자바스크립트에서의 특징
함수 범위 (Function Scope)
함수 내부에서 변수를 선언한 경우
함수 내부에서 선언된 변수는 함수 내부에서만 접근이 가능
변수
inCondition
의 범위는 함수 단위블록 범위 (Block Scope)
자바스크립트는 기본적으로 함수를 범위로 함
let
과const
키워드를 사용할 경우, 블록 범위를 가짐렉시컬 범위(Lexical Scope)
스코프는 함수를 호출할 때가 아니라 선언(정의)할 때 생김
호이스팅(Hoisting)
끌어올리기, 들어 올려 나르기
함수 호이스팅
변수 호이스팅
식(expression) vs 문(statement)
함수 선언식
호이스팅에 영향 받음
함수 표현식
호이스팅에 영향을 받지 않음
참조
https://alstn2468.github.io/Javascript/2020-05-13-FunctionScope_BlockScope_and_LexicalScope/
모던 자바스크립트 Deep Dive
https://joshua1988.github.io/web-development/javascript/function-expressions-vs-declarations/