오늘은 자바스크립트의 제어문 전역/지역변수 스코프 호이스팅 에 대해 알아보았다.
/*
var a = 50;
var b = 40;
var c = 60;
if (a < b) {
console.log("a는b보다 작다.")
}
-거짓이라 아무것도 나타나지 않음.
if (a > b) {
console.log("a는b보다 작다.")
}
// 거짓일경우는 표시되지 않는다. 참일 경우만 나타남.
// if else문은 거짓일 경우 사용자에게 알려주는 글
ex) 비밀번호가 틀렸을경우 틀렸다고 안내문을 띄워주는것
if (a > b) {
console.log("a는 b보다 크다.")}
else { console.log("a는 b보다 작다.")}
*/
// else if 문 - 가장 먼저 나오는 참만 실행시키고 정지 된다.
/*
if(a > b) {
console.log("a는 b보다 크다.")}
else if (b > c) {
console.log("b는 c보다 크다.")}
else if (a < c) {
console.log("a는 c보다 작다.")}
else if (b < c) {
console.log("b는 c보다 작다.")}
else {
console.log("모든 조건을 만족하지 않는다.")}
// 중첩 if 문 - 중첩되어 나타나는 버그를 없애기 위해 조금더 꼼꼼하게 작성하는 문
if (a !== b) {
if(a > b){
console.log("a는 b보다 크다.")
} else {
console.log("a는 b보다 작다.")
}
} else {
console.log("a와 b는 같다.")
}
*/
// 거짓이 되는 상황
// false , ""(빈문자) , 0 , null , undefined
/
if () {
console.log("참!!!")
} else {
console.log("거짓!!!")
} /
/*
var age = 15;
if (age >= 18) {
console.log("성인")
} else {
console.log("어린이")
}
var result = (age >= 18) ? "성인" : "어린이"
console.log(result)
*/
/*
var userId = prompt("아이디를 입력해 주세요.")
var userPw = prompt("비밀번호를 입력해 주세요.")
console.log(userId)
console.log(userPw)
if (userId === "eunhye" && userPw === "12345") {
alert ("로그인 되었습니다.")
} else {
alert("아이디 또는 비밀번호가 틀렸습니다.")
}
// 문자에서 숫자 데이터 타입으로 바꾸주기
console.log(userId)
console.log(typeof userPw)
if (userId === "eunhye" && parseInt(userPw) === 12345) {
alert ("로그인 되었습니다.")
} else {
alert("아이디 또는 비밀번호가 틀렸습니다.")
}*/
// 과거 전역변수와 지역변수의 구분하는 기준점은 함수
// 전역변수(모든 범위에 영향력을 행사 할 수 있는 법 - 함수 밖에서 생성 & 안과 밖 모두 발휘),
// 지역변수(특정 지역에만 정용되는 법 - 함수안에서 생성 및 발휘)
/*
var globalV = "전역변수"
function func() {
var localV = "지역변수"
console.log(globalV)
console.log(localV)
}
// func ()
console.log(globalV)
console.log(localV)
*/
// 현재 최신 JS 는 let, const를 사용해 구분 기준점이 다르다.
/*
var gv = "전역변수"
function func() {
gv = "지역변수"
console.log(gv)
}
func()
console.log(gv)
/
/ 위와 같이 var 키워드를 사용하지 안을겨우 변수의 값이 변해 지역변수로
출력된다. 이처럼 var 키워드를 사용하지 않을 겨우 나타나는 것에 대해 주의가 필요하다. */
/*
var gv = "전역변수"
if(true) {
var lv = "지역변수??"
console.log(gv)
console.log(lv)
}
console.log(gv)
console.log(lv)
// var gv = "전역변수"
/ 클라이언트 자바스크립트 console에서도 입력가능,
window(브라우저를 제어할때 사용되는객체)를 입력하면
property(key+value)를 볼 수 있는데
모든 전역변수는 이 window에 기본 property로 할당된다.
/
// 스코프 - 변수가 영향력을 발휘할 수 있는 범위 자체
// 전역 스코프 - 모든 범위에 영향력을 발휘
/*
var gv = "전역변수"
function func() {
console.log(gv)
}
func() -전역변수
console.log(gv) -전역변수*/
//지역스코프 - 함수안에서만 발휘
/
function func() {
var lv = "지역변수"
console.log(lv)
}
/
// func() -지역변수
// console.log(lv) -not defined
// 함수는 서로의 스코프에 접근할 수 없다!!!!!
/*
function a(){
var apple ="사과"
// console.log (apple)
}
function b(){
a()
console.log(apple)
}
b()
*/
//스코프 체인 (scope chain)
/*
var a = 10
function func1() {
var b = 20
function func2() {
var c = 30
console.log(a + b + c)
}
func2()
}
func1()
*/
//렉시컬 스코프(Lexical Scope) =정적 스코프(Static scope)
/*
var name = "eunhye"
function func1() {
console.log(name)
}
function func2() {
name = "yeo"
func1()
}
func2() - yeo 서로의 영역에 들어갈 수 없다. */
// 호이스팅 (끌어 올린다.)
//변수 호이스팅 - 순서에 상관 없이 변수가 존재하므로 끌어올린다 생각!
/*
console.log(a)
var a
a = "나는 A다."
var a = "나는 A다."
//변수초기화는 끌어 올려지지 않는다.
console.log(a)
*/
//함수 호이스팅
/*
func1()
function func1() {
console.log("Func1 함수다.")
}
func1() */
/*
func2() - not a function -> defined로 지정되어있기때문
var func2 = function () {
console.log("Func2 함수다")
}
func2()
*/
자바 math 공부 참고 페이지
"https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Math"
/*
var num1 = Math.abs(-3)
console.log(num1) // 절대값 반환 하는 math
var num2 = Math.ceil(0.3)
console.log(num2) // 올림처리하는 math
var num3 = Math.floor(10.9)
console.log(num3) // 내림처리하는 math
var num4 = Math.random()
console.log(num4) //0~1 까지 랜덤 math */
// parseInt() , parseFloat()
/*
var str1 = "20.6"
var str2 = "3.14"
var num1 = parseInt(str1) //소수점 이하 버림
var num2 = parseFloat(str2) //실수형태로 변경
console.log(num1)
console.log(num2)
*/
아직 함수에 대한 개념이 확실하게 잡히지 않은것 같아 많이 헷깔리고 어려운것같다.
하나하나 개념에대한 설명을 들었을때는 이해가 가지만 다시 앞으로가 이전에 배웠던 것들과 함께 쓰려면 다시 공부를 해야할 것 같다.
나는 공부하는걸 별로 좋아하지 않았지만 그래도 수학은 좋아했다. 문과 였음에도 시험기간에 다른공부는 안하고 수학공부만했었는데...
지금은 하나도 기억이 나지 않는다는것이 문제다 왜그렇게 하나도 배운적이 없는 것처럼 기억이 하나도 나지 않는지..
정말 기초인데도 단어들이 기억이안난다... 다시 공부를 해야할 것같다.