web-front
[ javaScript ] 간단정리 part 3
hanjuCoding
2024. 8. 2. 15:31
클로저
- 독립적인 변수를 가지는 함수
- 내부함수를 이용하여 별도의 스코프 정의
function test(name){
var str = name+'님 안녕하세요';
return function(){
return str;
};
}
var m1 = test('hong');
var m2 = test('kim');
console.log(f1); //f(){ return str; }
console.log(f1());//hong님 안녕하세요
console.log(f2());//kim님 안녕하세요
history객체
브라우저에서 이전에 방문했던 페이지 불러오는 객체
stack으로 저장됨
//a.html
<a href="b.html">b.html</a>
//b.html
<a href="c.html">c.html</a>
//c.html
<a href="#;" onclick="history.back()">이전 페이지로</a>
//history.back() 이전페이지(b.html)로 이동
//history.back() == history.go(-1)
location 객체
현재 문서의 url 정보 저장
<a href="#;" onclick="location.href='a.html';">페이지 이동</a>
<a href="#;" onclick="location.reload()">새로고침</a>
JS에서의 객체
console.log(navigator.userAgent);
var car = {
model:'flying whispher',
company:'bently',
color:"dark blue",
run:function(){
console.log("차가 달린다");
}
};
console.log(car);
//함수실행
car.run();
//속성
console.log(car.model);
console.log(car['company']);
//model,company,color, run 모두 다 속성이다.
//run은 익명함수가 들어간 속성이지, 메서드가 아니다.
//객체를 이렇게 생성해도 된다.
//new 라는 생성자 덕에 가능한 짓
function Student(){
}
var s = new Student();
s.name = 'hanju';
s.age = '26';
s.run = function(){
console.log('출근중');
};
console.log(s);
지역변수 vs 속성
function Square(w,h){
var width = w;
var height = h;
var result = 0;
var calc = function(){
result = width * height;
}
}
var square = new Square(5,10);
console.log(square); //Square {}
console.log(square.width); //undefined -> width는 속성이 아니라 지역변수이기 떄문.
//---------------------------
function Square2(w,h){
this.width= w;
this.height = h;
this.result = 0;
this.calc = function(){
result = width * height;
}
}
var square2 = new Square2(5,10);
console.log(square2); //{width: 5, height: 10, result: 0, calc: ƒ}
console.log(square2.width);//5
//this를 사용해서 속성을 만들어줬기때문에 접근가능
클래스 선언
//클래스
class Triangle {
//생성자
constructor(b, h) {
this.base = b;
this.height = h;
};
//메서드
calc() {
this.result = this.base * this.height / 2;
return this.result;
};
};
var tri = new Triangle(5, 10);
console.log(tri.calc()); //25
템플릿 문자열
//template 문자열
var name = '전한주';
var msg = '안녕';
console.log (name+"님 "+msg);
var test2 = `${name}님 ${msg}`;
console.log(test2);
전개연산자
배열의 원소들을 하나하나 넘길때 사용
//전개연산자 ...
var arr=[1,2];
var arr2 = arr;
console.log(arr==arr2); //true
var arr3 = [...arr];
console.log(...arr); //1 2
console.log(arr===arr3);//false
//배열합침
var arr4 = [...arr,...arr2,...arr3];
console.log(arr4);//[1,2,1,2,1,2]
//객체
var obj1 = {a:1,b:2};
var obj2 = {c:3,d:4};
var obj3 = {...obj1,...obj2};
console.log(obj3);//{a:1,b:2.c:3.d:4}
객체생성
//새 객체 생성
var obj4 = {...obj3,c:5};
console.log(obj4);
var propName = "name";
obj4[propName] = "홍길동"; //변수추가
console.log(obj4);
var student = {
stdno :1,
propName :"김길동" //변수가 아니라 속성명 자체
};
console.log(student);
var student2 = {
stdno :2,
[propName] :"최길동" //속성명을 변수의 값으로 저장
};
console.log(student2);
var studno = 3;
var name = '박길동';
var age = 10;
var func =()=>{
console.log('함수');
};
var student3 = {studno,name,age,func};
console.log(student3);
import는 아니지만 import
//test1.js
function func1(){
console.log('func1 호출');
}
function func3(){
console.log('test1의 func3()');
}
//test2.js
function func2(){
console.log('func2 호출');
}
function func3(){
console.log('test2의 func3()');
}
<script src = "test1.js"></script> <!--test1.js의 전체 내용을 불러옴-->
<script src = "test2.js"></script> <!--test2.js의 전체 내용을 불러옴-->
<script>
func1();
func2();
func3();
</script>
//func3는 test1,test2모두에 있다.
//test2를 더 늦게 호출했으니 test2의func3가 실행됨
import
function func1(){
console.log('func1 호출');
}
function func2(){
console.log('func2 호출');
}
function func3(){
console.log('test1의 func3()');
}
export{func1,func2};
function func4(){
console.log('func2 호출');
}
function func5(){
console.log('test2의 func3()');
}
export default func4;
//default는 하나만 export할 수 있다. default문도 하나만 가능
<script type="module">
import{func1,func2} from './test1.js'
func1();
func2();
import xxx from './test2.js';
xxx();
</script>
//test2에 있는 default를 xxx로 저장 후 ㅇㅇ
or
export default ()=>{
console.log('화살표 함수');
}
//default를 export할때 화살표함수나 익명함수를 사용할 수 있다.
//왜냐면 차피 이름으로 받아오는게 아니기 때문에.
쓰레드같은놈들
//setTimeout() : 특정시간 후에 실행
//setInterval() : 특정시간 마다 실행
console.log('시작');
setInterval(function(){ //or setTimeout
console.log('setTimeout');
},1000);
console.log('끝');
기본 이벤트 제거
window.onload=function(){
document.querySelector("#naver").onclick=function(e){
console.log(e);
alert("이동");
//기본 이벤트 제거 -> 네이버로 이동 안함
e.preventDefault();
}
}
네이버
이벤트 전파 중지
document.querySelector("#box").onclick = e=>{
alert('box');
e.stopPropagation(); //이벤트 전파 중지
}
//alert('box')후에 뒤으 #box와 관련된 이벤트 발생 x