###2023.01.07
오늘 배운 study 수업내용에서 가장 핵심
-JavaScript를 사용하기 전 왜 필요로 하는지
-언어를 배우는데 있어서 가장 basic 부분들에 대해 이해하기
참고 - http://www.tcpschool.com/javascript/js_intro_basic
https://ko.javascript.info/
https://poiemaweb.com/js-scope
자바스크립트를 문법을 알기 위해서는
에디터를 vs(Visual Studio code)를 사용하고, 크롬으로 개발자도구 F12키 확인하면서 수업을 진행하였다.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.3/jquery.min.js"></script> -->여기에cdn 값을 넣어준곳
<script src="/js/common.js"></script>
</head>
<body>
<button class="alert_btn">alert</button>
<button class="alert_btn">alert</button>
<button class="alert_btn">alert</button>
<button class="alert_btn">alert</button>
</body>
</html>
<head> </head>
사이에 넣어준다.<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.3/jquery.min.js"></script>
예
// var count = 0;
// window.onload = function () {
// var btn = document.getElementsByClassName("alert_btn");
// for (var i = 0; i < btn.length; i++) {
// btn[i].addEventListener("click", function (e) {
// count++;
// alert(count + "번째 버튼입니다.");
// });
// }
// };
$(document).ready(function () {
var btn = $(".alert_btn");
btn.each(function (i) {
var _this = $(this);
_this.on("click", function () {
alert(i + "번째 버튼입니다.");
});
});
});
직관적으로도 코드가 간결하면서 잘 보인다.!
alert창을 만들기 위해 버튼 4개를 만들었는데 버튼을 눌렀을 때 alert창이 0번째 1번째 순서대로 나오게 하기
- 고차원 수준 아키텍처
- 함수 용례
- 당장 봐선 명확해 보이지 않는 해결 방법에 대한 설명
이래도 뭐라는지 모르겠다 그냥 주석처리하면 되지? 이런 생각갖고 하면 혼자일해라~!! 같은 팀워크로 했을 땐 그래도 아주 기본적인건 설명해주고 해야 서로 혼돈하지않지~!!
//
경계로 이루어진 주석으로 문단으로 끊어서 사용
/* 내용들 */
문제점이나 해결못한 것은 임시주석 사용 /* ... */
/**
클래스 설명 주석으로
-import 다음에 기술
-블록주석을 사용
-각 라인은 *로 시작
-해당 클래스에 대한 기능과 용도 기술
-<pre>...</pre> 내용은 수정하지 않음
/**
* name : test
* function: 매개변수 2개를 받아서 2개를 합친값이 숫자면 true 아니면 false
* @param a {any} 매개변수 a
* @param b {any} 매개변수 b
*/
예)
var test = function (a, b) {
var t = a + b;
return typeof t === Number ? true : false;
};
이렇게 변수를 선언하기 전 참조해서 사용할 수 있는 강점!!꼭 알고 가자!!!
var는 a라는 이름의 변수가 있음에도 불구하고 또 그 아래에서 a라는 이름의 변수를 선언할 수 있다.
이처럼 이미 선언했던 변수명을 모르고 또 사용할 경우, 기존에 있던 변수는 전혀 다른 값을 가지게 됩다. 그 경우, 그 변수를 사용하는 다양한 로직들에 치명적인 문제가 생긴다. ~문제생기면 찾기도 드릅게 어렵다는거~
var는 Function-scoped이기 때문에 for문에서 for문의 순회를 위해 i라는 변수를 var로 선언한 경우, 이 변수는 for문이 종료되어도 접근이 가능하게 된다.
또한, 만약 for문의 함수 내부가 아닌, 함수 외부에 전역적으로 돌아갈 경우 for문에서 사용한 var 변수들은 전역 변수로서 역할을 하므로, 전역 변수가 남발될 수 있다.
이러한 var 문제점을 보안하기 const, let
예를 들어서 글을 쓰는데 주제를 위에다가 쓰는 이유? 목차가 왜 가장 앞에 있는 이유!를 생각하면 조금더 이해하기 쉽지 않을까? 난 이과가 아니고 문과라....이러한 설명을 풀이하고 이해하려면 이런식으로 접근해야 조금 더 이해하기 쉽다구
{스코프-범위블럭 }
일반적인 문자열
console.log("저는 " + city + " 에 살고 있구요, 이름은 " + name + ", 나이는 " + age + " 살 입니다.");
템플릿 리터럴
console.log(저는 ${city} 에 살고 있구요, 이름은 ${name}, 나이는 ${age} 살 입니다.
);
변수를 복사하는 방식 깊은 복사, 얕은 복사
얕은 복사란 객체를 복사할 때 위의 예제처럼 원래값과 복사된 값이 같은 참조를 가리키고있는 것을 말한다. 객체안에 객체가 있을 경우 한개의 객체라도 원본 객체를 참조하고 있다면 이를 얕은 복사라고 한다.
const a = [1, 2, 3, 4];
const b = a;
b[3] = 5;
console.log(a); // [1,2,3,5]
console.log(b); // [1,2,3,5]
const a = [
{
id: 1,
name: 'moon'
},
{
id: 2,
name: 'sim'
},
{
id: 3,
name: 'yean'
}
];
const b = [...a]
console.log(a === b) // false
console.log(a[0] === b[0]) // true
깊은 복사된 객체는 객체안에 객체가 있을 경우에도 원본과의 참조가 완전히 참조를 끊어내고 새로운 데이터를 복사한다.
JSON.stringify()는 객체를 json 문자열로 변환하는데 이과정에서 원본 객체와의 참조가 모두 끊어진다. 객체를 json 문자열로 변환후 JSON.parse()를 이용해 다시 자바스크립트 객체로 만들어주면 깊은 복사가 된다. 하지만 이방법은 사용하기는 쉽지만 다른 방법에비해 아주 느리다고 알려져있다.
lodash 라이브러리를 사용하면 깊은 복사를 더 쉽게 할 수 있다. lodash clodeDeep()
const a = [1,2,3,4];
const b = [
...a
]
b[3] = 5;
console.log(a) // [1,2,3,4]
console.log(b) // [1,2,3,5]
const a = [
{
id: 1,
name: 'moon'
},
{
id: 2,
name: 'sim'
},
{
id: 3,
name: 'yean'
}
];
const b = JSON.parse(JSON.stringify(a)) -->JSON.stringify()
console.log(a === b) // false
console.log(a[0] === b[0]) // false
온라인에서 lodash를 사용해보기 위해서
https://codesandbox.io/s/lodash-tester-forked-5bezx1?file=/index.js
콘솔로 아무리 해도 답이 안나와서 다시 수업들었던 것들 회상하는데 아! 온라인 lodash 코딩하는곳에서 해야된는걸 알게 되었음..
lodash clodeDeep()
import _ from 'lodash';
const a = [
{
id: 1,
name: 'moon'
},
{
id: 2,
name: 'sim'
},
{
id: 3,
name: 'yaen'
}
];
const b = _.cloneDeep(a)
console.log(a === b) // false
console.log(a[0] === b[0]) // false
정리한 후...
간단히 내 생각을 정리하자면 basic한 내용이지만 아직 알아야할 용어들도 많고, 익숙하지 않는 코드들 때문에 정리하는데도 3일 정도 걸렸지만..다시 보고 복습하면 보다 더 추가할 거 같다..(스터디한건 07월 토요일 3시간 수업을.. 현실은 일,월,화 걸쳐서 정리하고 있는중... ing 계속~)
실무에서 경험이 있는 사람들은 익숙한 단어들이지만, 나는 실무경험도 없고 여기저기서 조금씩 겉핥기식으로만 알았기 때문에 여기저기 찾아보면서 다시 이해하고 정리하는데 더 오랜시간이 걸린거 같다. 앞으로 javascript 익숙해지기 위해서 더 부단히 노력해야겠고, 용어들이랑 친숙해져야겠다. 나는 할 수 있다. i can do it