2019. 5. 19. 00:05ㆍJavaScript
...끄적끄적...
var는 더 이상 지양해야한다.
let 함수 스코프로 함수 내에서만 유효 유동적인 값
const 한번 선언 후 고정 재할당이 안됨. let을 보완.'
전역 스코프 (global scope)
변수가 함수 바깥이나 중괄호 바깥에 선언되면 전역 스코프로 소스 코드 모든 곳에서 해당 변수를 사용할 수 있습니다.
심지어 함수 내에서도... (전역 변수 == 독약)
(
전역 스코프는 프로그램을 쉽게 만드는 유혹이 있습니다.
프로젝트가 좀만 커지면 전역 변수는 독약!!!
소스코드 모든 부분에서 전역 변수를 건드릴 수 있기 때문에
버그 발생 시 어떤 변수를 건드렸는 지 찾기 힘들어집니다.
)
지역 스코프(local scope)
코드의 특정 부분에서만 사용할 수 있는 변수.
JS에서는 함수 스코프/ 블록 스코프가 이 지역 스코프에 해당합니다.
1. 함수 스코프(function scope)
함수 내에 변수를 선언하면 그 변수는 오직! 함수 내부에서만 접근할 수 있습니다. 함수 바깥에서는 접근 불가!
function hi(){
const hello = 'welcome to my hi function'
console.log(hello)
}
hi() // 'welcome my hi function'
console.log(hello) // 에러 발생!.. hello is not defined hi 함수 안의 세계의 변수 hello에 접근 불가!
2. 블록 스코프 (block scope)
중괄호{} 내부에서 const , let으로 변수 선언 시 그 변수들은 해당 중괄호 내부에서만 접근할 수 있다!
뭐 사실 함수 스코프도 이 블록 스코프에 포함하는 걸 다들 눈치 챘을 것 같네요 ㅎㅎ
함수 호이스팅
함수 선언식(function declaration)으로 함수를 작성하면,함수 최상단으로 호이스팅되어 코드 어디에서든 호출!
say(); //ho!
// 선언도 전에 호출 됬지만 자바스크립트 코드를 해석하면서 최상단으로 호이스팅되어 호출 성공.
function say(){
console.log("ho!");
}
함수 표현식(function expression)으로 함수를 작성하면, 함수 최상단으로 호이스팅 되지 않습니다.
say() // Cannot access 'say' before initialization
const say = function(){
console.log("ho!")
}
함수 선언식은 지양! 혼란을 피하기 위해 함수를 호출하기 전에 선언해야합니다.
네스티드 스코프(Nested scopes)
함수 A가 다른 함수 B안에 선언됬으면, 그 내부 함수A는 외부 함수B의 변수에 접근할 수 있습니다! 이런 것을
렉시컬 스코핑(Lexical scoping)이라고 합니다 하지만 외부 함수B는 내부 함수A의 변수에 접근할 수 없습니다.
function outerA() {
var outer = "나는 outer!!"; // name is a local variable created by init
function innerB() {
const inner = "나는 inner!!";
console.log(outer);
}
innerB();
// console.log(inner) 하면 inner는 defined되지 않았다고 error!!
}
outerA();
'JavaScript' 카테고리의 다른 글
[JavaScript] HTML templating (0) | 2019.05.15 |
---|---|
[JavaScript] event.target을 이용한 event delegation(이벤트 위임)과 이벤트 버블링 (0) | 2019.05.15 |
[JavaScript] JavaScript에서 애니메이션(setTimeout, requestAnimationframe) (0) | 2019.05.13 |
[JavaScript] XmlHttpRequest을 이용한 ajax (Asynchronous Javascript And XML) (0) | 2019.05.11 |
[JavaScript] 자바스크립트 객체(Object) (0) | 2019.05.08 |