Scope 범위
자바스크립트에서는 function안이 Local Scope로 분리된
지역 변수는 함수 내에서 전역 변수보다 더 높은 우선순위를 갖는다
let x = a;
function f(){
let x = b;
console.log(x);
}
console.log(x); // a
f(); // b
let x = a;
function f(){
x = b; //let이 없기 때문에, Scope 바깥의 변수 x를 가져옴
console.log(x);
}
console.log(x); // a
f(); // b
console.log(x); // b
Function Scope vs Block Scope
Block : 중괄호로 시작하고 끝나는 단위
for(let i=0; i<5; i++){
console.log(i);
}
console.log('final i:', i); // ReferenceError
var은 함수 단위로 자신만의 Scope를 가진다
let은 블록 단위로 Scope를 가진다 (더 예측하기 쉬움)
for(var i=0; i<5; i++){
console.log(i);
}
console.log('final i:', i); // 5
const도 let과 같이 Block Scope를 따른다
전역 변수와 window 객체
전역 범위를 대표하는 객체 window
Global Scope에서 선언된 함수, var 키워드를 이용해 선언된 변수는 전부 window 객체와 연결된다
function foo(){
console.log('bar')
}
foo === window.foo //true
var x=3;
x === window.x //true
let y=1;
y ===window.y //false
※전역 볌위에 너무 많은 변수를 선언하지 않도록 주의!(tip: 시작할 때 bracket을 열고 let 사용)
선언 없이 초기화된 전역 변수
절대로 선언 키워드(var, let, const)없이 변수를 초기화하지 마세요
eg.
function showAge(){
age = 90; //age는 전역 변수로 취급 (age === window.age)
console.log(age);
}
showAge(); //90
console.log(age); //90
Strict Mode를 사용하면 이런 실수를 방지할 수 있다
명령어
'use strict';
콘솔에서는 안되고 파일로 저장한 상태에서만 사용 가능