tag function에 tempalte literal을 넘겨주면 첫번째 인자에는 String을 두번째 인자에는 interpolation(${})안에 있는 값들을 넘겨준다.
예시
const tag = (strs, arg1, arg2) => {
return {
strs: strs,
arg1: arg1,
arg2: arg2
}
}
const res = tag `순서가 ${1} 이렇게 ${2}`
console.log(res);
//결과값
{ strs: [ '순서가 ', ' 이렇게 ', '' ], arg1: 1, arg2: 2 }
특징
주의!: tag에 template literal을 넘겨줄때 (),{}을 쓰지 않는다.
응용1
const tag = (strs, ...args) => {
return {
strs: strs,
args
}
}
const res = tag `${1}이렇게${2}`
console.log(res);
위와같이 interpolation은 2개, 그 사이에 Sring이 끼어있는 경우라면 어떨까?
{ strs: [ '', '이렇게', '' ], args: [ 1, 2 ] }
결과는 string이 3개나 된다.
응용2
const tag = (strs, ...args) => {
return {
strs: strs,
args
}
}
const res = tag `${1}이렇게${2}${3}`
console.log(res);
interpolation을 하나 더 붙이면 어떻게 될까?
{ strs: [ '', '이렇게', '', '' ], args: [ 1, 2, 3 ] }
String이 4개가 된다.
interpolation의 앞뒤에는 무조건 String이 오는걸 가정하기 때문이다.
interpolation 2개
"", ${1}, "이렇게", ${2}, ""
그러므로 String이 3개가 되는 것이다.
interpolation 3개
"", ${1}, "이렇게", ${2}, "" , ${3}, ""
이렇게 4개가 되는 것이다.