변수를 사용하겠다고 선언
함
var name;
let age;
const sex;
유일하게 재선언이 가능한 var
<script>
var name; // 선언하고
name = "NOHSANGWOO"; // 할당
console.log(name); // 사용하고
var name; // 재선언
// 나머지 let, const는 재선언이 불가능
</script>
변수에 값을 할당
var name = "NOHSANGWOO";
let age = 31;
const sex = "male";
재할당이 가능한 var, let
<script>
var name = "NOHSANGWOO";
let age = 31;
const sex = "male";
name = "KIMJONGRAN";
age = 59;
// const sex = "female"; // const는 값의 재할당이 불가능하다.
</script>
정리
var 재선언 가능, 재할당 가능
let 재선언 불가능, 재할당 가능
const 재선언 불가능, 재할당 불가능
<script>
function checkFunction(){
if(1){
var name = "NOHSANGWOO";
console.log(name); // NOHSANGWOO
}
console.log(name); // NOHSANGWOO (이게 되네?)
return 0;
}
checkFunction();
</script>
<script>
function checkFunction(){
if(1){
let name = "NOHSANGWOO";
console.log(name); // NOHSANGWOO
}
console.log(name); // Uncaught ReferenceError: age is not defined
return 0;
}
checkFunction();
</script>
var는 함수레벨 스코프, let과 const는 블록레벨 스코프
즉함수레벨 스코프는
함수안에서 선언된거라면 같은 함수 내부에선 어디서든 살아있고
블록레벨 스코프
는 해당 블록({})에서만 살아있다.
<script>
var global = 'global';
function foo() {
var local = 'local';
console.log(global); // global
console.log(local); // local
}
foo();
console.log(global); // global
console.log(local); // Uncaught ReferenceError: local is not defined
</script>
말그대로 최상단, 즉 window에 바로 선언된 변수는
window하위 함수 또는 블록 어디서든 사용 가능하다.
<script>
if (true) {
var name = "NOHSANGWOO";
}
console.log(name); // NOHSANGWOO
</script>
var는 function level scope다
즉 블록레벨에서 선언하면 블록을 제거한뒤 선언한것과 같은 의미
여기선 블록을 제거하면 전역(global-scope) 변수가 된다
<script>
function someFunc(){
console.log('hello');
var name = 'NOHSANGWOOO';
}
</script>
이 코드를 자바스크립트가 해석하면
<script>
function someFunc(){
var name;
console.log('hello');
name = 'NOHSANGWOOO';
}
</script>
일케됨
!! but선언만 먼저하는거지 할당도 같이 하는건 아님
<script>
function someFunc(){
console.log(name); // undefined
var name = 'NOHSANGWOOO';
}
</script>