일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- MySQL
- 이클립스
- Collection
- CSS
- Git이해하기
- 기본코드
- 필드
- javascript
- 오버라이딩
- java기초
- java
- 배열
- 파일이동버튼
- 버튼페이지이동
- 맨땅에 해딩
- Git알아보기
- js
- form
- 컬렉션프레임워크
- list
- arraylist
- 데이터베이스연동
- Eclipse
- java입문
- object
- cmd
- jdbc
- emmet
- html
- 점프 투 파이썬
- Today
- Total
단단히
변수 var ,let, const 본문
변수는 데이터를 저장하는 공간이다. 빈 그릇이라고 생각하면 편하다.
Javascript는 managed language이다. 때문에 개발자가 직접 메모리를 제어하지 못한다.
개발자가 직접 메모리 주소를 통해 값을 저장하거나 참조할 필요가 없다. 변수를 통해 값에 접근이 가능하다.
변수는 변수의 값이 아닌 메모리 주소를 기억하고 있다.
초기화한 변수명을 사용할 때, 자바스크립트 엔진이 변수명과 매핑된 메모리 주소를 통해 저장된 값을 가져온다.
변수에 값을 저장하는 것을 할당(assignment, 저장, 대입)이라고 한다.
변수에 저장된 값을 읽는 것을 참조(reference)라고 한다.
변수명을 자바스크립트 엔진에 알리는 것을 선언(declaration)이라고 한다.
스코프(Scope)
원 의미와 같이 범위라는 의미를 가진다.
- 정의 : 식별자 접근 규칙에 따른 유효 범위
- 식별자(변수, 함수, 클래스)에 접근할 수 있는 범위가 존재한다.
- 범위는 중괄호{} 블록(Block Scope) 또는 함수(Function Scope)에 의해 구분된다.
외부 범위(scope)에서 선언한 식별자(변수, 함수, 클래스)는 안쪽 스코프에서 사용이 가능하다.
하지만, 내부 스코프에서 선언한 식별자는 외부 범위에서 사용이 불가능하다.
가장 외부의 스코프를 전역 스코프(Global Scope)라고 부른다.
그 외의 다른 스코프는 지역 스코프(Local Scope)라고 부른다.
>> 지역 스코프에서 사용한 식별자는 다른 지역 스코프에서 사용이 불가능하다.
스코프는 중첩이 가능하다. (스코프안에 스코프를 만들 수 있다.)
전역 스코프보다 지역 스코프가 우선순위가 먼저이다.
전역 변수보다 지역 변수의 우선순위가 먼저이다.
전역 변수는 전역 스코프에서 선언한 변수를 말한다.
지역 변수는 지역스코프에서 선언한 변수를 말한다.
// 함수 선언문 (함수 이름 생략 불가)
function name(params) {
return params
}
// 함수 표현식 (함수이름 생각 가능)
var a = function name(params) {
return params
}
// 함수 생성자 함수
var a = new Function('jun',10,"javascript");
// 화살표 함수
var a = (x,y) => x+y
화살표 함수는 블록 스코프로 취급된다. 함수 스코프가 아니다.
const
constant 라는 단어를 말한다. '상수'라는 뜻으로 변할 수 없는 값을 말한다.
값 재할당이 불가능하고 재선 언도 불가능하다.
const a = 5;
const b = 2;
const Nickname='kim haha';
console.log(a+b);
console.log(a-b);
console.log("My Name Is " + Nickname);
결괏값
app.js:9 Uncaught TypeError: Assignment to constant variable.
만약 const로 저장한 변수 즉, 상수의 값을 바꾸려 한다면 위와 같은 에러 메시지가 나온다.
const로 선언된 Nickname을 밑에서 재정의하고 실행을 하면 오류가 발생한다.
즉, const는 상수로 변하지 않는 값에만 사용한다.
const a = 5;
const b = 2;
const Nickname='kim haha';
console.log(a+b);
console.log(a-b);
console.log("My Name Is " + Nickname);
Nickname = "hahahoho";
console.log("My NickName is " + Nickname);
Uncaught SyntaxError: Identifier 'a' has already been declared
const a = 5;
const b = 2;
const Nickname='kim haha';
console.log(a+b);
console.log(a-b);
console.log("My Name Is " + Nickname);
const a =7;
console.log(a);
식별자 'a'는 이미 선언되었습니다.
해석 그대로 이미 선언된 변수명을 사용하면 SyntaxError가 뜬다.
let
const 안의 값은 변하면 안 된다.
하지만 변수의 값이 변하는 상황이 발생한다.
그때는 const대신 let을 사용하면 된다.
재할당이 가능하고 재선언은 불가능하다.
const a = 5;
const b = 2;
let Nickname='kim haha';
console.log(a+b);
console.log(a-b);
console.log("My Name Is " + Nickname);
Nickname = "hahahoho";
console.log("My NickName is" + Nickname);
결괏값
var
variable라는 단어의 앞부분만 쓴 것. '변수'라는 뜻으로 값이 바뀔 때 사용한다.
var는 같은 변수명을 사용이 가능하다.
즉, 재할 당도 가능하고 재선 언도 가능하다.
특이하게 var키워드를 사용한 변수는 블록 스코프를 무시한다. 외부에서도 접근(참조)이 가능하다.
var변수는 오직 함수 스코프만 따른다.
var a = 10;
console.log(a);
var a = 20;
console.log(a);
하지만, 협업을 했을 때 var키워드 사용은 에러를 야기할 수도 있다.
var의 값은 재할 당도, 재선 언도 가능하기 때문에 다른 사람의 코드에 있는 변수를 모르고 바꿀 가능성이 있기 때문이다. 최대한 let 키워드 사용을 권장한다.
암시적 선언
위와 같이 const, var, let을 사용하지 않고 변수를 선언하는 것. 즉, 공백을 사용할 수 있다.
하지만 JS에서는 암시적 선언을 권장하진 않는다.
키워드(const, var, let)를 사용해 명시적으로 변수를 선언하는 것을 권장한다.
'Java Script > 개념정리' 카테고리의 다른 글
Returns (0) | 2022.08.22 |
---|---|
Functions_xxx.xx( .. ) (0) | 2022.08.19 |
Objects ( xxx.xx() ) (0) | 2022.08.17 |
array (0) | 2022.08.15 |
Boolrean(true, false), null, undefined (0) | 2022.08.12 |