코딩공부를 하며 scope의 개념은 많은 곳에서 사용되는데 scope에 관해 직관적으로 이해하기엔 쉽지 않았다. 그래서 간단하게 scope에 관해 정리해 보았다.
우선 scope의 정의에 대해 살펴보면 "변수 접근 규칙에 따른 유효범위" 라고 나오고 이 scope엔 전역변수(global scope) 지역변수(local scope)로 나누어져있다.
전역변수(global scope)
변수가 함수 바깥이나 중괄호 ({}) 바깥에 선언되었다면, 전역 스코프에 정의된다고 한다. 이때 global scope 는 최상단의 scope로 어디서나 접근이 가능한 변수이다.
지역변수(local scope)
코드의 특정 부분에서만 사용할 수 있는 변수는 지역 스코프에 있다고 할 수 있다. 이런 변수들은 지역 변수라고 불리죠.
자바스크립트에서는 두 가지의 지역 변수가 존재합니다. 바로 함수 스코프(function scope)와 블록 스코프(block scope)이다. 헌데 이 지역변수는 함수내에서 전역변수 (global scope) 보다 더 높은 우선 순위를 가지고있다.
let greeting = 'hello' function greetsomeone(){ let firstname = 'josh' return greeting + ' ' + ' firstname' }
greetsomeone() ; // => 'hello josh'
firstname // => reference error
위코드에서 변수 first name에 접근할수있는 범위가 존재 하는데 그범위가
( { }<= 중괄호 ) 안으로 한정이 된다. 그래서 중괄호가 끝난후 firstname이 뭔지 알아보려고 해도 에러가 나타나는 모습이다.
function greetsomeone(){
let firstname = 'josh'
return greeting + ' ' + ' firstname'
}
전체는 globla scope 에 해당되어 위에서 언급한 것처럼 어디서나 접근이 가능하여
greetsomeone() ; // => 'hello josh'
가 도출되는 모습을 보여준다.
이 scope를 나타내는 가장 적절한 그림을 찾아보았다.
취조실 유리라는 scope의개념을 설명한 그림으로 안쪽에선 밖을 볼수 있지만 밖에선 안을 볼수없다라는 scope의 개념과 가장 적절한 그림인것같다.
var키워드 let키워드
js는 기본적으로 함수단위로 자신만의 scope를 가진다
이때쓰이는 var 키워드는 옛날 방식으로 요즘엔 많이 사용되지 않고
block단위로 scope를 구분했을때에 예측하기 쉬운 코드를 작성하려고 let 키워드를 많이 사용한다.
const키워드 (ex.pi = 3.141592 .....)
값이 변하지 않는 변수, 즉 상수를 정의할때 사용되며 let 과 동일하게 block scope를 따른다 const키워드는 값을 재정의 하려하면 type error를 나타낸다.
전역 범위를 대표하는 객체 window
global scope에서 선언된 함수 , 그리고 var 키워드를 이용해 선언된 변수는 window객체와 연결이된다. 이때 주의할점은 전역변수 안에 너무 많은 변수를 사용하지 않게 주의 해야한다는점이다.
선언키워드 없이 변수를 초기화하면 안됨!
function showage(){
age = 90 ; <----------- 이부분!
console.log(age)
}
showage(); // => 90
console.log(age) // <= 90
여기서 age는 window.age 가되어버린다. 위에 실수를 방지하고 싶을땐
'strict mode'를 사용한다 코드에
'use strict'
를사용하면 문법적 오류부분을 바로 파악할수 있다.