일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- AWS기초
- AWS
- Big-O notation
- complexity
- 리커젼
- CSS
- 인터프리터
- 원본과 복사본
- 코드스테이츠
- var
- IT
- 재귀함수
- node.js
- scope
- css기초
- 기초공부
- vscode
- 메모이제이션
- 개발툴
- prototype
- 클로저
- 생활코딩
- let
- JavaScript
- 스코프
- APPEND
- appendChild
- AWS조사
- node.js설치
- flex기본
- Today
- Total
Jveloper
Scope 본문
scope에서 짚고넘어가야 될 녀석들
● lexical scope / dynamic scope
● local scope / global scope
● block level / function level
● 호이스팅
- lexical scope / dynamic scope
lexical(static) scope : 유효범위가 코드를 작성될 때 결정됨 -> 자바스크립트에서는 함수가 선언되는 동시에 자신만의 scope를 가짐
dynamic scope : 유효범위가 실행 순서에 의해 결정됨
* 유효범위란? 변수(선언)와 그 값(할당)이 어디서부터 어디까지 접근이 가능한지를 판단하는 범위
var scope; // 선언입니다.
scope = '할당입니다'; // 할당입니다.
console.log(scope) // => '할당입니다'
꼭 선언을 해주고 할당하자 ! 되도록이면 전역변수는 많지 않을수록 좋다. 나중에 같은이름의 변수가 등장했을때 버그를 초래할 수 있음
- local scope / global scope
local scope(지역변수) : 함수안에 정의되어있는 변수는 그 안에서만 쓸 수 있다 - 바깥에서 접근 불가능 !
global scope(전역변수) : 전역변수는 어디서든 접근이 가능함
var global = '전역변수입니다';
function makeLocal(){
var local = '지역변수입니다';
console.log(global + ' ' + local); // 전역변수입니다 지역변수입니다
}
makeLocal();
console.log(global); // => 전역변수입니다
console.log(local); // => 에러(ReferenceError)
- function level / block level
function level : var
block level : let / const (ES6)
function level 예제 :
function functionLevel(){
for(var i = 0; i < 1; i++){
var exam = '함수레벨입니다';
console.log(exam); // => 함수레벨입니다
}
console.log(exam); // => 함수레벨입니다
}
block level 예제 :
function blockLevel(){
for(let i = 0; i < 1; i++){
let exam = '블락레벨입니다';
console.log(exam); // => '블락레벨입니다'
}
console.log(exam); // ? => 에러(ReferenceError)
}
const sayHello = '수정 불가능입니다';
// for(const i = 0; i < 3; i++) : 잘못된 예제 !
let, const 는 block level 이기 때문에 { } 이 부분을 벗어나서 접근할려하면 에러가 뜬다
1. let과 const keyword는 block을 벗어나면, 접근 불가능
2. let과 const는 var로 정의된 변수를 재정의할 수 없음
3. const는 불변(immutable)한 값으로, 다시 값을 할당할 수 없음
- 호이스팅 규칙
예제1.
// 실제코드 //
var a = 2;
// javascript //
var a;
a = 2;
예제2.
// 실제코드 //
a = '호이스팅;
var a;
console.log(a); // ??
// javascript //
var a;
a = '호이스팅';
console.log(a); // 호이스팅
Quiz.
1.
console.log(a)
var a = 2;
2.
function showName() {
console.log("First name : " + name);
var name = "Ford";
}
함수선언식은 항상 상단으로 호이스팅됨 function a(){} => 얘는 통째로 올라가니까 실행이 될 수도 있지만,
함수표현식은 할당된 변수만 상단으로 호이스팅됨 var a = function(){} => 에러가 날것이다.
const와 let을 사용할 때는 선언한 곳보다 위에서 접근하는 것이 금지된다(에러 발생).
정리 : let과 const를 잘 쓰자
var는 너무 자유분방하다
'JavaScript' 카테고리의 다른 글
__proto__, constructor, prototype (0) | 2019.06.03 |
---|---|
Recursion(재귀 함수) (0) | 2019.05.07 |
Prototype (0) | 2019.05.07 |
Closure (0) | 2019.04.25 |
Node.appendChild 와 Node.prepend (0) | 2019.04.15 |