글 수 109
0
조회 수 : 6973 신고 : 0
미리보기 : |
---|
뭐. 8탄이라. 점점 골때려져 가겠는데 이게 웬 8탄이냐..
이번엔 어려워서 골때릴 것 같다구요?
뭐.. 아무렴 어때요.ㅋㅋ
제가 6탄에서 스크립트 난독화에 대해 설명을 한 적이 있었습니다.
그기서 난독화 테크닉에 괄호한테 십쇼키라고 욕했죠.
ㅋㅋ 근데 가끔씩 유용합니다. 왜그럴까요?
그전에 있어서 괄호가 어디어디 쓰이는지부터 보도록 하죠.
var s=0;
for(i=1;i<=100;i++){
s+=i;
}
alert(s);
뭐. 일단 쉽게 1부터 100까지 더하는 반복문입니다.
그렇다면 이걸 일반적인 다른 방법이 있다면,
var s=0,i=1;
while(i<=100)
s+=i++;
alert(s);
그럼 함수는..
function(a,b){
return a+b;
}
그리고 또는 1탄에서 언급한 기술..
(function(a){alert(a);})('안녕');
아니면
alert(({a:'b',c:'d'}).a);
괄호는 우리 코딩이나 프로그래밍 생활에 정말 유용하게 쓰이는 녀석입니다.
자 그렇다면, 6탄에서 본적 있죠?
var a=(b='이런',b+'젠장');
alert(a);
이 스크립트를 실행하면 이런젠장이란 글씨가 뜹니다.
a는 함수인가요? 아닌뎁쇼.
그럼 뭡니까? 몰라요. 그렇다는데요?
저보다 자스천재님이 가르쳐주실지도...ㅋ
어쨌든, 난독화에 쓰이기도 하고, 일회성도 있기 때문에 잠시 써먹는 식으로도 그만이죠.
예를 들어,
while(Math.round(Math.random())){
a=1;
window.status+=a;
}
이 a는 어자피 while 문 안에서만 쓸 거 아닙니까? 그럼 그냥 이렇게 하세요.
while(a=1,Math.round(Math.random())){
window.status+=a;
}
어째보면 좀 의미가 있군요. 여기서 지역변수 a는 1로 정의했다고 보이기도 하고,
그리고 조건문은 뒤에 썼죠. 실제로 while 문이 인식할 건 마지막 인자니까요.
6탄에서도 말했지만 (1,2,...,n) 이런 괄호 연산자 실행시 결과는 무조건
마지막에 쓴 n이 나옵니다.
그래서 이걸 활용한 별 희한한 식이 나오기도 하죠.
v.push((c=arguments[i],l=c.length>4?2:1,parseInt((h=c.substr(1+j*l,l),h+(l>1?'':h)), 16)));
이걸 제가 직접 작성했다고 자랑하긴 좀 뭐하죠.
이걸 풀어보면 어떻게 될까요? 풀어봅시다.
c = arguments[i];
l = c.length > 4 ? 2 : 1;
h = c.substr(1 + j * l, l);
h = h + (l > 1 ? '' : h);
v.push(parseInt(h,16));
이렇게 나오는군요.
오늘 골때리는 자바스크립트는 여기까집니다.
괄호 연산자로 잠시동안 쓸 지역변수를 정의하거나, 아니면 잠시 해야 할 연산을 한 다음에, 마지막에 진짜 연산식을 넣는 가방 역할을 하는 이 괄호 연산자.
그다지 쓸데는 없습니다. 왜냐하면 이건 코드 축소하거나 난독화에 쓰이거든요.
거기다가 이건 고급 테크닉입니다. 이거 작성하는데 에러 잡기 정말 힘들겁니다.
먼저 코드를 어떻게 진행해 나갈지부터 확실히 잡힌 다음에 리팩토링하는 게 좋겠죠.
이번엔 어려워서 골때릴 것 같다구요?
뭐.. 아무렴 어때요.ㅋㅋ
제가 6탄에서 스크립트 난독화에 대해 설명을 한 적이 있었습니다.
그기서 난독화 테크닉에 괄호한테 십쇼키라고 욕했죠.
ㅋㅋ 근데 가끔씩 유용합니다. 왜그럴까요?
그전에 있어서 괄호가 어디어디 쓰이는지부터 보도록 하죠.
var s=0;
for(i=1;i<=100;i++){
s+=i;
}
alert(s);
뭐. 일단 쉽게 1부터 100까지 더하는 반복문입니다.
그렇다면 이걸 일반적인 다른 방법이 있다면,
var s=0,i=1;
while(i<=100)
s+=i++;
alert(s);
그럼 함수는..
function(a,b){
return a+b;
}
그리고 또는 1탄에서 언급한 기술..
(function(a){alert(a);})('안녕');
아니면
alert(({a:'b',c:'d'}).a);
괄호는 우리 코딩이나 프로그래밍 생활에 정말 유용하게 쓰이는 녀석입니다.
자 그렇다면, 6탄에서 본적 있죠?
var a=(b='이런',b+'젠장');
alert(a);
이 스크립트를 실행하면 이런젠장이란 글씨가 뜹니다.
a는 함수인가요? 아닌뎁쇼.
그럼 뭡니까? 몰라요. 그렇다는데요?
저보다 자스천재님이 가르쳐주실지도...ㅋ
어쨌든, 난독화에 쓰이기도 하고, 일회성도 있기 때문에 잠시 써먹는 식으로도 그만이죠.
예를 들어,
while(Math.round(Math.random())){
a=1;
window.status+=a;
}
이 a는 어자피 while 문 안에서만 쓸 거 아닙니까? 그럼 그냥 이렇게 하세요.
while(a=1,Math.round(Math.random())){
window.status+=a;
}
어째보면 좀 의미가 있군요. 여기서 지역변수 a는 1로 정의했다고 보이기도 하고,
그리고 조건문은 뒤에 썼죠. 실제로 while 문이 인식할 건 마지막 인자니까요.
6탄에서도 말했지만 (1,2,...,n) 이런 괄호 연산자 실행시 결과는 무조건
마지막에 쓴 n이 나옵니다.
그래서 이걸 활용한 별 희한한 식이 나오기도 하죠.
v.push((c=arguments[i],l=c.length>4?2:1,parseInt((h=c.substr(1+j*l,l),h+(l>1?'':h)), 16)));
이걸 제가 직접 작성했다고 자랑하긴 좀 뭐하죠.
이걸 풀어보면 어떻게 될까요? 풀어봅시다.
c = arguments[i];
l = c.length > 4 ? 2 : 1;
h = c.substr(1 + j * l, l);
h = h + (l > 1 ? '' : h);
v.push(parseInt(h,16));
이렇게 나오는군요.
오늘 골때리는 자바스크립트는 여기까집니다.
괄호 연산자로 잠시동안 쓸 지역변수를 정의하거나, 아니면 잠시 해야 할 연산을 한 다음에, 마지막에 진짜 연산식을 넣는 가방 역할을 하는 이 괄호 연산자.
그다지 쓸데는 없습니다. 왜냐하면 이건 코드 축소하거나 난독화에 쓰이거든요.
거기다가 이건 고급 테크닉입니다. 이거 작성하는데 에러 잡기 정말 힘들겁니다.
먼저 코드를 어떻게 진행해 나갈지부터 확실히 잡힌 다음에 리팩토링하는 게 좋겠죠.
소중한 댓글 부탁드립니다.
추천수 10단위당 메달이 1개씩 노출되고, 추천수에 따라 배경색이 변하며, 일정수의 추천수를 받을시 아이콘이 붙게됩니다.
추천수 10단위당 메달이 1개씩 노출되고, 추천수에 따라 배경색이 변하며, 일정수의 추천수를 받을시 아이콘이 붙게됩니다.
추천수에 따른 배경색 보기
본문으로 바로가기
- 추천수 50개이상
- 추천수 30개이상
- 추천수 20개이상
- 추천수 10개이상
- 추천수 3개이상
첫번째 댓글을 남겨주세요!