
(JS파일 / script 내부)
[var]
var num1; // 전역변수
num2 = 200; // (변수명 앞에 아무런 키워드 없으면 전역 변수) 전역변수
function test){
var num3; // 지역변수
num4; // 전역 변수 -> 지역에 있어도 키워드가 없기 때문에 전역 변수!
// ** 전역 변수는 function()이 끝나도 사용 가능 함
if(true){
var num5 = 500; // 지역 변수 -> function()내부에서 사용 가능(if 밖에서도 사용 가능)
num6; // 전역 변수
//var 사용 빈도 적음
//사용 빈도 const > let > var
}
}
: javascript는 변수 선언시 자료형이 아닌 var, let, const,미작성 중 하나를 골라서 작성한다.
: 변수, 변수명 중복 가능(덮어쓰기 가능), 함수 레벨 scope
// var 변수 선언 예제
// 함수 스코프 예제
var hello = 'hello!'
function sayHello(){
var hello='hello in fuction!';
console.log(hello);
}
sayHello(); // hello in function!
console.log(hello); //hello!
var hello='hello';
if(true){
var hello='hello in if';
}
console.log(hello);// hello in if
: var는 {} 단위가 아닌 function 단위의 scope를 가진다.
-> if절 내부에 hello를 변수로 새로 선언했지만, var로 선언한 변수의 scope은 {}가 아닌 function이기 때문에 hello 변수인 {} 밖에서도 변경된 것을 볼 수 있다.
-> 오류가 나지 않고 마지막으로 선언된 값을 보여준다.
: 변수, 변수명 중복 불가능, 블록{} 레벨 scope
-> 변수를 선언한다.
-> let으로 선언하면 값을 재정의 할 수 있다.
// let 변수 선언 예제
let hello='first hello'; // first hello
hello='changed hello'; // changed hello
//{}괄호 scope 예제
let hello='first hello';
{
let hello='inner hello!';
console.log(hello);//inner hello
}
console.log(hello); //first hello
//변수 두번 선언 불가 예제
let hello='first hello';
let hello='second hello'; //error
: 상수, 변수명 중복 불가능, 블록{} 레벨 scope
-> 상수를 선언한다.
-> 한번 선언된 상수는 다시 재정의 할 수 없다.
//const 상수 선언 예제
const hello='hello';
hello='change hello'; // error
//상수로 선언한 hello 값을 변경하려고하면 에러가 발생한다.
// const. {}블록 스코프 예제
const hello ='hello!';
{
const hello='inner hello';
console.log(hello); // inner hello;
}
console.log(hello); // hello;
: 괄호 안에 hello를 선언했지만, const의 scope은 괄호 블록 안이기 때문에 괄호 밖의 hello 상수를 또 선언할 수 있다.
1 순위 : const
-> JS는 HTML상에서 특정 요소를 선택해 지속적으로 추적하여 사용하는 경우가 많다. 상수형 변수에 저장해 고정적으로 사용한다,
2 순위 : let
3 순위 : var
비추천 : 미작성
함수 레벨 scope : 함수 내에서 선언된 변수는 함수 내에서만 유효하며 외부에서 참조할 수 없다.
-> 즉, 함수 내부에서 선언된 함수는 지역 변수이고 외부에서 선언한 변수는 전역 변수이다.
블록 레벨 scope : 모든 블록 내에서 선언된 변수는 코드 블록 내에서만 유효하며 외부에서 참조할 수 없다.
-> 즉, 코드 블록에서 선언한 변수는 모드 지역 변수이다.
: JS변수 선언 시 별도의 자료형을 입력하지 않는다.
-> 변수에 대입되는 값(리커럴)에 의해 자료형이 결정된다.
1) string(문자열 / "abc", 'abc' 같음)
2) number(숫자 / 100, -3.14)
3) boolean(논리값 / ture, false)
4) object(객체 / 배열(Array), JS객체{K:V, K:V})
5) function(함수)
6) underfined(자료형이 정의돠지 않은 변수) -> 값이 대입되지 않은 변수
*null은 참조하는게 없음을 나타내는 리터럴(자료형 x)