var
변수 선언할 때 사용
새로운 코드를 작성할 땐 사용하면 안됨
- let 또는 const만 사용
- 이유는 블록 scope가 없기 때문 (**매우 중요)
- 그래서 var로 작성된걸 let 또는 const로 변경하는 작업을 한다면 스코프에 유의해야한다.
블록 scope가 아닌 함수 수준 scope를 갖는다.
var 선언은 함수가 시작되는 시점에 처리 된다.
scope 무시되는 예제
예제 1) if statement scope가 무시됨
if (true) {
var test = true;
}
alert(test); // alert의 값이 true로 찍힘
예제 2) for loop에서도 scope이 무시됨
for (var i = 0; i < 10; i++) {
// ...
}
alert(i); // 10이 찍힘;; 무섭네..
예제 3) 함수 안의 scope 무시됨
function sayHi() {
if (true) {
var phrase = "Hello";
}
alert(phrase); // Hello 출력
}
sayHi();
alert(phrase); // phrase is not defined
변수를 중복 선언 가능
예제 1)
var user = "Peter";
var user = "Denny"; // 이 "var"는 아무것도 하지 않습니다(이전에 이미 선언됨).
alert(user); // Denny
선언하기 전 사용할 수 있는 var
예제 1)
var 선언은 함수가 시작될 때 처리됨. 전역에서 선언한 변수라면 스크립트가 시작될 때 처리
아래의 예제는 함수 본문 내에 var로 선언한 변수는 선언 위치와 상관없이 함수 본문이 시작되는 지점에서 정의된다.
function sayHi() {
phrase = "Hello";
alert(phrase);
var phrase;
}
sayHi(); // Hello 출력
아래처럼 동작된다.
function sayHi() {
var phrase;
phrase = "Hello";
alert(phrase);
}
sayHi();
변수가 끌어올려 지는 현상을 호이스팅(hoisting) 이라고 불린다.
var로 선언한 모든 변수는 함수의 최상위로 끌어올려진다.
https://ko.javascript.info/var
오래된 var
ko.javascript.info
'IT > javascript' 카테고리의 다른 글
[javascript] import 자세하게 파해쳐보자 (2) | 2024.09.12 |
---|---|
[JS] 제너레이터 함수 (generator function) (0) | 2024.07.07 |
[JS] prototype (0) | 2024.04.30 |
[JS] if else 리팩토링 (중첩 조건문 처리하기) > 코드 변환 스냅샷 (0) | 2024.04.29 |
[JS] if else 리펙토링 (객체 + 함수) (0) | 2024.04.29 |