- 변수 선언 위치에 따른 구분
// 변수 선언 위치에 따른 구분
var num1 = 10; // 전역 변수(선언된 후 같은 문서 내 어디서든 사용 가능)
num2 = 5; // 전역 변수(변수명 앞에 어떤 키워드도 없으면 전역 변수가 됨)
var num1 = 20; // JS에서 var 변수는 덮어쓰기가 됨.. / Java에서는 오류 발생
console.log("num1 : " + num1); // 윈도우 개발자도구 콘솔창에 num1 : 20 출력
console.log("num2 : " + num2); // 윈도우 개발자도구 콘솔창에 num2 : 5 출력
function test(){
var num3 = 3; // function 지역 변수
num4 = 4; // * 전역 변수(변수명 앞에 어떤 키워드도 없으면 전역 변수가 됨) *
if(true){
var num5 = 5; // function 지역 변수
num6 = 6; // ** 전역 변수(변수명 앞에 어떤 키워드도 없으면 전역 변수가 됨) **
}
console.log("num5 : " + num5); // 윈도우 개발자도구 콘솔창에 num5 : 5 출력
}
test(); // 함수 호출
// console.log("num3 : " + num3); -> error 발생
console.log("num4 : " + num4); // 윈도우 개발자도구 콘솔창에 num4 : 4 출력
// function 종료 후에도 사용 가능
// console.log("num5 : " + num5); -> error 발생
console.log("num6 : " + num6); // 윈도우 개발자도구 콘솔창에 num6 : 6 출력
// function 내부에 있는 if문 종료 후에도 사용 가능
- 변수 선언 방식
- var : 변수 / 변수명 중복 가능(덮어쓰기) / 함수 레벨 scope(범위)
- let : 변수 / 변수명 중복 불가능 / 블록{ } 레빌 scope
- const : 상수 / 변수명 중복 불가능 / 블록{ } 레벨 scope
- 1순위 : const (JS는 특정 요소를 선택해서 사용하는 경우가 많아서 상수에 고정)
- 2순위 : let
- 3순위 : var (ES6 이후부터 사용 빈도가 많이 적어짐) - JavaScript 자료형
- 자바스크립트는 변수 선언 시 별도의 자료형을 지정하지 않음
→ 변수에 대입되는 값(리터럴)에 의해서 자료형이 결정됨
- string : 문자열
- number : 숫자 → 정수 / 실수 모두 포함
- boolean : 논리값
- object : 객체 → 배열(Array), 자바스크립트 객체 {k : v , k : v}
- fuction : 함수
- undefined : 정의되지 않은 변수 → 변수가 선언만 됐지, 값이 대입되지 않음
※ null은 타입보단 값(리터럴)의 개념
- null (참조하는 게 없음) : document.getElementById("오타")
→ 아이디가 일치하는 요소가 없어서 참조할 수 없음 - 자료형 확인
<button onclick="typeTest()">자료형 확인</button>
<div id="typeBox"></div>
// 자료형 확인
function typeTest(){
// 아이디가 "typeBox"인 요소 얻어오기
const typeBox = document.getElementById('typeBox');
let temp; // 선언 후 값을 초기화 하지 않은 상태 == undefined
typeBox.innerText = "temp: " + temp;
// string
const name = "홍길동";
// typeof 변수명 : 해당 변수의 자료형을 검사하는 연산자
typeBox.innerHTML += "<br>name : " + name + " / " + typeof name;
const gender = 'm';
typeBox.innerHTML += "<br>gender : " + gender + " / " + typeof gender;
// 자바스크립트는 char 자료형 존재 X
// "", '' 모두 string 리터럴 표기법
// number
const age = 30;
const height = 178.9;
typeBox.innerHTML += "<br>age : " + age + " / " + typeof age;
typeBox.innerHTML += "<br>height : " + height + " / " + typeof height;
// boolean
const isTrue = true;
typeBox.innerHTML += "<br>isTrue : " + isTrue + " / " + typeof isTrue;
// object
// java (배열 : {} 사용)
// int[] arr = {1,2,3};
// javascript (배열 : [] 사용)
const arr = [10, 30, 50];
typeBox.innerHTML += "<br>arr : " + arr + " / " + typeof arr;
for(let i=0; i<arr.length; i++){
typeBox.innerHTML += "<br>arr[" + i + "] : " + arr[i];
}
// 자바스크립트 객체는 {K:V} (Map 형식)
const user = {"id" : "user01", "pw" : "pass01"};
typeBox.innerHTML += "<br>user : " + user + " / " + typeof user;
// 객체 내용 출력 방법 1 (key값 이용)
typeBox.innerHTML += "<br>user.id : " + user.id;
typeBox.innerHTML += "<br>user.pw : " + user.pw;
// 객체 내용 출력 방법 2 (객체 전용 for문 for ... in)
for(let key in user){
// user 객체의 키(id, pw)를 반복할 때마다 하나씩 얻어와
// key 변수에 저장
typeBox.innerHTML += "<br>user[" + key + "] : " + user[key];
}
console.log(user);
// function (js에서는 함수도 자료형)
// 1) 변수명 == 함수명
const sumFn = function(n1, n2){ // 익명 함수
return n1 + n2;
}
// 함수명만 작성한 경우 -> 함수에 작성된 코드가 출력됨
typeBox.innerHTML += "<br>sumFn : " + sumFn + " / " + typeof sumFn;
// 함수명() 괄호를 포함해서 작성하는 경우 -> 함수 호출(수행)
typeBox.innerHTML += "<br>sumFn(5, 10) : " + sumFn(5, 10);
typeBox.innerHTML += "<br>tempFn(15, sumFn) : " + tempFn(15, sumFn);
}
function tempFn(n3, fn){
return n3 + fn(10, 30);
}
See the Pen 24-12-25 js review20 by Namu (@Namu-the-sans) on CodePen.
- 원시 타입과 참조 타입
- 원시 타입 : 데이터 복사가 일어날 때 메모리 공간을 새로 확보하여 독립적인 값을 저장
== 원시 타입 값을 그대로 복사하여 데이터를 바꿔도 다른 데이터에 영향을 미치지 않음(깊은 복사)
ex) 숫자(number), boolean, undefined, null, 문자열(string)
- 참조 타입 : 메모리의 위치(주소)에 대한 간접적인 참조를 통해 메모리에 접근
== 객체의 메모리 주소를 복사하여 데이터를 바꾸면 참조하는 모두에게 영향을 미침((얕은 복사)
ex) 배열( [ ] ), 객체( { } ), 함수(function)
'HTML, CSS, JavaScript > JavaScript' 카테고리의 다른 글
문자열, 숫자, 형변환, 연산자 (0) | 2024.12.25 |
---|---|
이벤트(Event) (0) | 2024.12.18 |
요소 접근 방법 ( DOM, document.get~. document.querySelector~ ) (2) | 2024.12.16 |
데이터 입출력 ( innerHTML, innerText, value ) (0) | 2024.12.16 |
JavaScript 개요 (0) | 2024.12.16 |