화살표 함수

화살표 함수란 function 키워드 대신에 =>를 사용해서 보다 쉽게 함수를 선언할수 있다. 

모든 경우에서 화살표 함수를 사용할수 있는것은 아니다.

1
2
3
4
5
    () => { }; //매개변수가 없을경우
 
     x => { }; //매개변수가 하나일경우 ( 괄호를 생략 가능 )
 
(x, y) => { }; //매개변수가 두개 이상일 경우 ( 괄호 생략 불가능 )
cs

화살표 함수는 익명함수로만 사용할수 있다. 따라서 화살표 함수를 호출하기 위해선 함수 표현식을 사용한다.


1
2
const calc = x => x * x;
console.log(calc(5)); // 25
cs


5가 매개변수로 들어가서 5 * 5가 되어 반환되어서 출력된다.


콜백함수로 사용할수도 있다. 이경우 es5보다 함수표현식이 간결 해진다.


1
2
3
4
5
6
7
8
9
10
11
12
13
// ES5
var arr = [123];
var pow = arr.map(function (x) { // x는 요소값
  return x * x;
});
 
console.log(pow); // [ 1, 4, 9 ]
 
// ES6
const arr = [123];
const pow = arr.map(x => x * x);
 
console.log(pow); // [ 1, 4, 9 ]
cs

this

화살표 함수와 function 키워드로 생성한 일반 함수의 가장 큰 차이는 this

일반 함수의 this는 매번 함수를 정의할때마다 각각의 this가 존재 했습니다.


이것을 해결하기위해 that이나 bind()를 이용해서 문제점을 해결했습니다. 


하지만 화살표 함수는 자신의 this객체를 생성하지 않기 때문에 that이나 bind()를 사용하지 않아도


this를 사용할수 있습니다. 


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
// ES5
 
function foo() {
    console.log(this);        // foo{}
 
    setTimeout(function foo2() {
        console.log(this);    // window{}
    }, 1000);
}
 
var f = new foo();
 
 
// ES6
 
function foo() {
    console.log(this);        // foo{}
 
    setTimeout(() => { console.log(this) }, 1000);    // foo{}
}
 
var f = new foo();
cs



function 키워드를 사용한 함수에서는 window객체를 반환하는 반면


화살표 함수를 이용한 곳은 foo객체를 반환하는것을 볼수 있다. 



화살표 함수를 사용하면 안되는 경우


화살표 함수는 Lexical this를 지원하므로 콜백 함수로 사용하기 편리하다. 

하지만 화살표 함수를 사용하는 것이 오히려 혼란을 불러오는경우도 있다


1. 메소드 

화살표 함수로 메소드를 정의하는 것은 피해야 한다. 


1
2
3
4
5
6
const person = {
  name'Ko',
  sayHi: () => console.log(`Hi ${this.name}`)
};
 
person.sayHi(); // Hi undefined
cs


this는 window객체를 가르키고 있기 때문에 undefined가 출력된다.


기존에 function 키워드를 사용했다면 this는 person객체를 가르키기 때문에 name이 정상적으로 출력된다.


또는 ES6의 축약 메소드 표현을 사용하는 방법도 있다.


1
2
3
4
5
6
7
8
const person = {
  name'Ko',
  sayHi() { // seyHi() { === sayHi: function() {
    console.log(`Hi ${this.name}`);
  }
};
 
person.sayHi(); // Hi Ko
cs


2. 생성자 함수

화살표 함수는 생성자 함수로 사용할 수 없다. 생성자 함수는 prototype 프로퍼티를 가지며 

protorype 프로퍼티가 가리키는 프로토타입 객체의 constructor를 사용한. 

하지만 화살표 함수는 prototype 프로퍼티를 가지고 있지 않다.

1
2
3
4
5
6
const Foo = () => {};
 
// 화살표 함수는 prototype 프로퍼티가 없다
console.log(Foo.hasOwnProperty('prototype')); // false
 
const foo = new Foo(); // TypeError: Foo is not a constructor
cs


3. addEventListener

addEventListener 함수의 콜백 함수를 화살표 함수로 정의하면 this가 상위 컨택스트인 전역객체 window를 가리킨다.


1
2
3
4
5
6
var button = document.getElementById('myButton');
 
button.addEventListener('click', () => {
  console.log(this === window); // => true
  this.innerHTML = 'Clicked button';
});
cs


따라서 addEventListener 함수의 콜백 함수 내에서 this를 사용하는 경우,


function 키워드로 정의한 일반 함수를 사용하여야 한다.


일반 함수로 정의된 addEventListener 함수의 콜백 함수 내부의 this는 이벤트 리스너에 바인딩된 요소를 가리킨다.



1
2
3
4
5
6
var button = document.getElementById('myButton');
 
button.addEventListener('click'function() {
  console.log(this === button); // => true
  this.innerHTML = 'Clicked button';
});
cs






참조 사이트 :  https://poiemaweb.com/es6-arrow-function


ES6 기초 문법 세가지


1. const

ES6에 들어가며 새롭게 추가된 변수 선언법이다.

기존에 var와 달리 상수형으로 코딩이 가능하며

값을 재할당 할수 없다. 

const NUM = 100;

console.log(NUM); /* 100 */

NUM = 1; /* Assignment to constant variable. ( 상수 변수라 값을 할당할 수 없다.) */

console.log(NUM); /* 100 */

하지만 참조형으로 사용한다면 값변경이 가능합니다.


원시형 변수에서만 상수형으로 동작하고 array, object등에선 값변경이 가능해집니다.




2. let

ES6에서 var를 대체하는 새로운 키워드

기존에 var는 호이스팅 현상이 있어서 어디서든 호출해도 여기저기 잘불려 다니는 말랑말랑한 변수선언이였다면 

반면 let, const는 엄청 딱딱한 친구들입니다. 호출한 시점에 변수 선언이 이루어지지 않았다면 에러가 출력됩니다.

기존에 var와 달리 직관적이고 자연스러운 표현이 됬습니다. 

console.log(num); /* undefined */


var num;

console.log(num); /* num is not defined */


let num;


하지만 저는 swift언어를 배운입장에선 의아했습니다. 

swift에서는 let을 상수 선언으로 사용하지만 ES6에서는 let을 자유롭게 변경하는 변수로 사용합니다.

let은 기존 var와 같이 자유롭게 사용할수 있지만

기존 var보다는 좀더 직관적이고 자연스럽게 사용 할수있습니다.




3. Template literals ``(백틱) 

세번째로 백틱 ``입니다.


기존에 자바스크립트에서는 문자열을 표시할때  ' 혹은 ''을 사용했습니다.


ES6에서는 ``이 추가되어 아주 편리해 젔습니다. 


var content = '';

content = '<tr>'; content += '<td>' + realdate + '</td>'; content += '<td>' + price + '</td>'; content += '<td>' + pri_ch + '</td>'; content += '<td>' + pri_chp + '</td>';

기존에 이런식으로 여러줄로 표현되거나 한줄에 우겨넣으면 아주 복잡했던 코드를 간단하게 


let content = '';

content = `<tr>

<td> ${realdate} </td>

<td> ${price} </td>

<td> ${pri_ch} </td>

<td> ${pri_chp} </td>`;

`` 하나로 표현할수 있다. 변수는 ${}안에 넣어주면 됩니다. 





이상으로 ES6문법 세가지를 알아봤습니다. 


추가적으로 어느 블로그를 보니 var와 let 을 브라우저 종류별로 테스트 한 글을 읽었는데


얼마전까지는 var가 let보다 압도적으로 빨랐지만 현재는 비슷한 수준까지 올라왔다고 한다.


하지만 섞어쓰는것은 제일느리고 var든 let이든 한가지를 골라서 쓰는게 가장 효율적이라고 한다. 


안녕하세요 


이번 포스트는 구글 애드센스 광고를 티스토리 블로그에 넣는법을 알아 보겠습니다. 


일단 기본적으로 다들 애드센스 승인을 받으셔야 합니다.


승인을 못받으셨으면 승인 먼저 받으시길 바랍니다.


저같은 경우에는 블로그 개설할때 신청하고 


2주정도 꾸준히 글을 올리니 어느 순간 승인이 전부 되어 있드라구요 


그래서 광고 설정 하는법에 대해 포스팅 하려고 합니다.


일단 티스토리에서는 기본적으로 상단 하단에 텍스트/이미지 광고를 넣는 다고 합니다.




다들 웹서핑하면 한번씩은 본것 같죠 ?


상단에 기본적으로 광고가 있고 글을 읽다가 


중단에 있는경우도 있고 


깔끔하게 상하단에만 있는경우도 있습니다. 


우선 저희는 상하단에 자동으로 크기에 반응하는 광고를 넣어보겠습니다.




1. 광고 생성


우선 애드센스페이지에서 


광고 -> 광고 단위 -> 새 광고 단위를 눌러줍니다.



2. 광고 종류 선택

광고 종류는 기본적으로 세가지가 있습니다.

저희가 선택할 텍스트 및 디스플레이 광고는 

글이나 이미지 링크 광고등을 크기 게재위치 스타일 선택만으로 페이지에 광고 해줍니다.


3. 광고 이름 및 크기 선택 

알맞는 광고 이름과 

광고 크기 

광고 유형을 선택할수 있습니다. 

광고이름은 보통 제가 알아보기 쉬운 이름을 넣는것이 좋습니다.

예를 들면 티스토리 상단, 하단

이런식으로 넣는다면 상단이랑 하단을 구분해서 광고를 얼마나 보고 클릭하는지 알수있겠죠 

광고 크기는 여러가지가 있습니다.

하지만 저희 블로그는 모바일에서도 웹에서도 태블릿에서도 접속할수 있기때문에 

어떤화면에서 보는지에 따라 반응해서 크기를 자동으로 조절 해주는 

반응형으로 선택하겠습니다.

유형은 텍스트 및 디스플레이로 선택합니다.

저장 및 코드 생성 버튼을 눌러줍니다. 


4. 광고 생성 완료

저장 및 코드 생성 버튼을 클릭하면


그림과 같이 구글 애드센스에서 코드를 넘겨 줍니다. 


이제 광고도 만들었고 광고를 삽입해 보겠습니다.



5. 블로그에 광고 넣기

광고 넣는 법은 간단합니다.

블로그 관리 페이지에서 -> 플러그인 -> 구글 애드센스(반응형) 

-> 광고 형태는 상단만 하고싶으시면 상단, 하단만 하고싶으시면 하단 

-> 아까 구글에서 준 코드를 넣어줍니다. 그리고 변경사항을 적용하면 끝입니다.




그 후....

광고 단위를 처음 만드시면 상태가 신규입니다.


제 글과 같이 제대로 광고를 넣어줬음에도 광고가 안나온다고 하시는데


신규 상태에서는 약 30분정도는 광고가 안나온다고 합니다.


조금만 참고 기다리시면 광고가 올라오는걸 확인하실수 있을겁니다. 







+ Recent posts