자바스크립에서 함수를 사용하는 방법이다.

 

 

 

1
2
3
4
function a() {
    console.log("a");
};
a();
cs

function a()는 일반적인 함수 모양이고 a(); 는 자바스크립트 함수를 실행시키는 방법이다.

 

자바스크립트에서는 함수의 모양을 아주 다양하게 사용할 수 있다. 

예를 들면 함수 안에 함수를 넣을 수 있다.

1
2
3
4
5
6
7
8
function b(c) {
    console.log("123");
    c();
}
 
b(function c() {
    console.log("1234")
});
cs

 

결과는 

123

1234

 

함수 안에 함수를 쓸수 있다. 이처럼 변화 무쌍하게 사용할 수 있다.

그리고 es6버전에 와서는 더 간단하게 함수를 표현할 수 있다.

화살표 함수라는 것이다.

1
2
3
4
5
6
7
8
9
10
function a() {
    console.log("a");
};
//화살표함수로 바꾸면
const a = ()=>{
console.log("a")
};
 
//만약 함수 내용이 한줄이라면 더 {}도 생략 가능하다.
const b = () => console.log("1234")
cs

 

그러나 화살표 함수의 치명적인 약점이 있으니 일반 함수와 this사용법이 다르다.

원래 this가 함수 안에서 사용되면 함수 안에 있는 값을 참조하게 된다.

그러나 화살표 함수를 쓰면 this는 window객체를 사용한다.

 

1
2
3
4
5
6
7
8
9
10
11
window.name = 'kim';
 
 
 
const obj = {
    name'Lee',
    names: function () {
        console.log(`my name is ${this.name}`);
    }
};
obj.names();
cs

결과는 my name is Lee

화살표 함수를 쓰면

 

1
2
3
4
5
6
7
8
9
10
11
window.name = 'kim';
 
 
 
const obj = {
    name'Lee',
    names: () => {
        console.log(`my name is ${this.name}`);
    }
};
obj.names();
cs

여기서 값은 my name is kim이다.

 

그러면 여기서 화살표 함수 대신 줄여서 쓸 수 있는 방법이 무엇이 있을까?

ES6 부터는 function을 생략하여 쓸수 있다. 이렇게 말이다.

1
2
3
4
5
6
7
8
9
10
11
window.name = 'kim';
 
 
 
const obj = {
    name'Lee',
    names() {
        console.log(`my name is ${this.name}`);
    }
};
obj.names();
cs

이렇게 하면 결과는 my name is Lee이다.

 

 this를 윈도우 객체로 하려면 화살표 함수를 객체 안의 값을 사용하려면 function을 사용하나거나 

생략하는 방법을 사용하는 것이 좋다. 

canvas= document.querySelector('canvas').toDataURL('image/png');

 

그림 파일이나 캔버스를 이런식으로 선택해서 이렇게 하면 엄청 긴 주소로 파일을 가져오고 디비에 집어 넣을 수 있다.

 

장점 

1. 사진을 데이터로 변환하여 데이터 베이스에 집어 넣을 수 있다.

2.정확한 데이터를 입력할 때 좋다.

(서명 같은거 받을때 혹은 화면에 무언가를 써서 바로 집어 넣어야 할때 좋다.)

 

2.단점

1. 느리다. 

 이거 데이터 베이스에 정장된거 보면 엄청 긴 문자열이 들어간다. 긴 문자열을 빼와야 하니 느릴 수 밖에...

데이터 베이스에 보통 이런 길이로 들어간다.

 

#> base64 vais.png
iVBORw0KGgoAAAANSUhEUgAAANgAAACtCAYAAADSz7GfAAAAAXNSR0ICQMB9xQAAAARnQU1BAACx
jwv8YQUAAAAJcEhZcwAAEnQAABJ0Ad5mH3gAAAAZdEVYdFNvZnR3YXJlAE1pY3Jvc29mdCBPZmZp
Y2V/7TVxAAAWJklEQVR4Xu2df3AV13XHL6SWCWAHnASLmGDLTkAUOkXQ8mOGjCH5w6JtYlMnNZpp
YxG32O4kRbSTsXAby7TTIJo0iDQDeDwZY7dT7IwbbNczxn80mJIZIBkjy05GxgkWru0Kk8TgFPM7
qPvdd5+07767u3f37d23u+/7mVl09+np6emx3z3nnnPuueNGHAQhxArj5VdCiAUoMEIsQoERYhEK
jBCLUGCEWIQCI8QiFBghFqHACLEIBUaIRSgwQixCgRFiEQqMEItQYIRYhAIjxCIUGCEWocAIsQgF
RohFKDBCLEKBEWIRCowQi1BghFiEAiPEIhQYIRahwEgkXn31VfHCCy+I48ePy0dIEBQYCeXcuXNi
586dYs6cOe6xYsUKMX36dNHX1yefQfxgZ1+i5aWXXhKnTp0SBw8eFFu3bvW1WP39/WL+/PnyjKjQ
gpFRYKVaWlrEuHHjRFtbm2upNmzYEOgOwl0k/uRaYJgP4ALo6Ohw77gkPvgc16xZI44dOyYfMQPu
IwkALmLeOHDgwMiSJUvg2lYcPT098hkkCsPDwyMTJkyo+jzDjubm5pGzZ8/KVyE6cmXBcLfEnXbp
0qXu3EDl6aefliMSBbh5cSzRli1bhCNMeUZ05EZgTz31lBvB6u3tlY9UAzeRLkt0orqFoL29Xaxe
vVqeET8yLzDcXTHZXrVqldGFwLlYdKLelGC1tm/fLs9IEJkVGMS0cuVKV1xRIlU615Eky3333Sdu
[....]

위의 문장보다 더 길게 들어간다. 한번은 캔버스로 선 하나 그은거 저장해봤는데 크롬 콘솔창에 10줄 이상 들어간걸로 봤다.

 

2.용량이 커진다.

 대략 30%정도 더 커진다고한다.

 

3.지원하는 브라우저가 있고 지원하지 않는 브라우저가 있다고 한다.

 

 

 

분명 필요할 순간이 있을 것이다. 막 사용하기 보다 상황에 맞게 잘 사용하면 분명 엄청난 도움이 될 것이라고 생각된다.

엔터로 로그인한다든지 글을 쓴다던지 하는 이벤트를 한번 만들어 보겠습니다.

<script>

  function enterEvent(e){

     if(e.keyCode==13){

            하고 싶은 이벤트를 입력하세요.

      }

  }

</script>

 

<html>

<input type="password" onkeyup="enterEvent(e)"  id="pwd">

</html>

 

제이쿼리와 화살표 함수를 사용하면 더 편해집니다.

<script>

$(function(){

$("#pwd"). keyup(e=>{

     if(e.keyCode == 13){

        실행시키고 싶은 이벤트

   }

}

});

</script>

 

이걸 활용하면 마우스로 클릭 하게 하지 말고 키보드로 엔터 눌러도 무언가 이벤트가 일어나게 할 수 있어요.

 

+ Recent posts