336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

필자는 최전방 개발자로서 자바스크립트를 사용하는 사람들을 많이 만난다. 이들 대부분은 주로 jQuery와 몇 가지 플러그인을 사용해 멋진 라이트박스 효과나 이미지 슬라이더를 추가하는 정도의 작업을 하지만, 그중 일부는 키보드 위로 손을 올려 놓기만 해도 코드가 저절로 써진다는 ‘제다이’급 개발자들이 있다.

이 두 가지 기술 수준의 중간 어딘가에 있는 사람은 때로 어떻게 해야 할지 모르는 상황에 부닥친다. 전문적인 지식을 찾는 길은 많다. 지금 구덩이에 빠져 도움이 필요하다면 모든 자바스크립트 전문가가 알아야 하는 다음과 같은 몇 가지 개념을 살펴보라.

자바스크립트 비밀 1: 클로저(Closures)
자바스크립트의 클로저는 함수에 부모 함수의 범위에 대한 접근성을 제공한다. 개발자에게는 극히 혼란스러운 개념이다. 필자는 자바스크립트를 배울 당시 의도하지 않은 클로저로 인해 코드를 디버깅하는 데 몇 시간을 소비한 적이 있다. 이런 실수를 통해 배운 이후에는 클로저가 상당히 멋지다고 생각했고 다시 몇 시간 동안 클로저를 사용하여 문제를 해결하려 헛되이 노력하기도 했다.

결국, 배운 것은 클로저는 부모 범위에 대한 접근성을 가진 안쪽 함수(아래 고차 함수 참조)를 반환할 때 유용하다는 점이다. 이로써 변수를 보관하기 위한 일종의 비공개, 또는 보호된 환경이 만들어진다. 아래 예에서 count는 threeTimer가 호출될 때 접근 및 증분되며, 점이나 괄호 기호를 통해 직접 접근할 수는 없다.

// **Closures**
function makeThreeTimer(){
var count = 0;
return function(){
if(count < 3){
console.log('doing work');
count++;
}
else {
throw new Error('No more work');
}
}
}
var threeTimer = makeThreeTimer();
threeTimer(); // logs 'doing work' (count gets incremented)
threeTimer(); // logs 'doing work' (count gets incremented)
threeTimer(); // logs 'doing work' (count gets incremented)
threeTimer(); // throws an error
threeTimer.count; // returns undefined


자바스크립트 비밀 2: 고차 함수
기능적 프로그래밍 언어에서 함수는 1급 구성원이다. 다른 모든 값과 마찬가지로 전달할 수 있으며 이로써 흥미로운 가능성이 열린다. 고차 함수는 다른 함수를 소비 또는 생산하는 함수를 말한다. call 또는 bind와 같은 function 프로토타입의 메소드는 모두 고차 함수다. 커링(currying), 메모이제이션(memoization)과 같은 기법을 고차 함수로 표현할 수 있다. 자바스크립트에서 고차 함수를 사용하면 관점 지향 프로그래밍(Aspect-oriented programming)도 가능하다.

자바스크립트 비밀 3: 함수 호출
함수를 호출하는 가장 일반적인 방법(괄호 연산자를 사용하는 방법)을 이해한 다음에는 call과 apply를 사용하는 방법을 배울 차례다. 괄호 연산자 대비 call/apply를 사용할 때의 장점은 함수가 실행되는 컨텍스트를 지정할 수 있다는 점이다(this의 값). 이러한 형태는 고차 함수, 특히 이러한 고차 함수가 나중에 실행되는 함수를 소비할 때 볼 수 있다. Function 프로토타입에서 bing 메소드의 내부는 call/apply의 훌륭한 예다.

// Possible implementation of bind using apply
function bind(func, context){
return function(){
func.apply(context, Array.prototype.slice.apply(arguments));
}
}


자바스크립트 비밀 4: this는 무엇인가?
this 키워드는 많은 자바스크립트 개발자에게 큰 장애물로, 어떤 사람들은 아예 이 키워드를 외면한다. 필자가 지금까지 접한 이 키워드에 대한 최고의 설명은 예후다 캐츠가 함수 호출에 대한 블로그에 쓴 글이다. call/apply 또는 bind를 사용하지 않을 경우 this 값은 다음과 같은 경우를 제외하고 항상 전역 객체를 참조한다.

1. 문제의 함수가 새로운 연산자를 사용하여 호출된 경우, 현재 만들어지고 있는 새로운 객체를 가리킨다.
2. 문제의 함수가 객체의 멤버인 경우, 이 객체를 가리킨다.

단, 호출되는 함수가 클릭 핸들러 또는 setTimeout 등에서 비동기적으로 호출될 때는 2번 규칙을 무시해야 한다. 다음을 참고하라.

Person.getName(); // 'this' points to Person
setTimeout(Person.getName, 1000); // 'this' points to the global object
JavaScript secret No. 5: Protecting the global scope


자바스크립트 비밀 5: 전역 범위 보호
자바스크립트의 결함 중 하나는 페이지의 모든 스크립트가 공유되는 전역 컨텍스트에서 실행된다는 점이다. 이 결함이 악용될 경우 웹 사이트는 교차 사이트 스크립팅 공격에 취약하게 된다. 공유 전역 컨텍스트는 다른 문제도 일으킨다. 예를 들어 많은 스크립트가 한 페이지에서 실행되는데, 모든 스크립트를 개발자가 결정하는 것은 아니다(광고 스크립트 등이 대표적이다). 이 스크립트들은 전역 공간에서 실행되며 모두 같은 전역 변수에 접근할 수 있다. 이러한 스크립트 두 개가 같은 전역 변수를 사용하게 되면 서로 간섭하기 시작하고, 그러면 코드는 망가지게 된다.

전역 범위의 사용을 최소화하는 것은 간섭을 막고 긴 디버깅 시간을 줄이는 데 도움이 되는 방어적 기법이다. 변수를 전역적으로 저장하는 것을 완전히 없앨 수는 없지만 네임스페이싱과 같은 기법을 사용하면 최소화할 수 있다.

// **Namespacing**
// The global footprint is a single object containing
// all other references needed.

var MyApp = {};

MyApp.id = 42;
MyApp.utils = {
validate: function(){
//do work
}
};


또는 모듈 패턴도 있다.

// **Module pattern**
// This relies on immediately invoked anonymous functions and the
// closure they create to maintain access to variables within the
// function.

var MyApp = (function(){
//declare a local variable
var appId = 42;

function getAppId(){
//referring to a variable in this function's parent scope
return appId;
}

return {
getAppId: getAppId
};
}());

appId; // undefined
MyApp.appId; //undefined
MyApp.getAppId(); // returns 42. (Brought to you by closures)
JavaScript secret No. 6: Inheritance


자바스크립트 비밀 6: 상속
자바스크립트에서 상속은 여러 가지 이유로 긴 혼란의 역사를 갖고 있다. 대부분 개발자(필자가 만난 많은 자바스크립트 개발자들 포함)들은 클래스 모델을 충실하게 이해하지만, 프로토타입 모델에 대해서는 매우 혼란스러워한다. 프로토타입 상속을 사용하는 언어 목록을 살펴보고 나면 아마 이러한 현상을 이해할 수 있을 것이다.

자바스크립트를 제외한 다른 주류 언어에는 프로토타입 상속이 없다. 게다가 자바스크립트에서는 클래스 모델을 에뮬레이션하는 것이 가능하다. 그 결과 상속에 대한 접근 방식이 매우 다양하며, 이들 중 상당수가 독선적, 모순적이다. 의사 클래스 방식(pseudo-classical approach)은 자바스크립트의 함정 중 하나이므로 필자는 절대 사용하지 말 것을 제안한다. 대부분 개발자에게 친숙하게 보이겠지만 사실 근사치일 뿐이므로 금방 깨진다. editor@itworld.co.kr

'IT > jquery_javascript' 카테고리의 다른 글

jquery each callback function  (0) 2014.02.13
jQuery Select Box  (0) 2014.02.10
mouseover 와 mouseenter 의 차이점  (0) 2013.09.03
jquery select selector  (0) 2013.08.23
DOM Script 정리  (0) 2013.08.21
Posted by 당양부부34

2013. 11. 20. 11:02 IT/ASP

ASP Round, Cint, Int 함수

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

ASP 에서 Round 함수는 반올림 함수가 아니다.

 

페이징을 관련 프로그래밍을 하면서 한페이지씩 많을 때가 있어서

 

확인하다가 우연히 발견했다.

 

이해를 돕기위해 간단히 표로 보여준다

 

 

숫자 Round Cint Int
1.5 2 2 1
2.5 2 2 2
3.5 4 4 3
4.5 4 4 4
5.5 6 6 5
6.5 6 6 6
7.5 8 8 7
8.5 8 8 8
9.5 10 10 9
10.5 10 10 10

 

뭔가 규칙같은게 보이나?

 

그래 Round 이놈은 무조건 짝수로 만들고 있다. 1.6 은 2가 되고 2.6도 2가 된다.

 

당연한 얘기지만 0.5 보다 작을 때는 소숫점을 잘라버린다.

 

내가 페이징할 때 자주 쓰는 Cint 역시 Round와 동일하게 처리됐다.

 

그래서 소숫점을 잘라주는 Int를 사용하면 문제없이 내림처리가 가능하다.

 

그럼 ASP에서 반올림은 어떻게 할까? 여러가지 방법이 있겠지만,

 

Int(자연수+0.5)

 

이러면 해결된다. 간단하나?

 

그런데 왜 저렇게 처리될까 해서 포털에서 검색을 해봤더니 결과가 뙇!!

 

알다시피 Round함수는 통계함수다.

 

0.5이상일 때 무조건 반올림 처리하는 것보다, 홀수면 반올림 짝수면 내림처리를 하는게

 

통계학적으로 봤을 때 오차가 줄어든다고 한다.

Posted by 당양부부34
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

작업을 하다보면 텍스트가 정해진 width를 넘어가는 경우 어떻게 처리해야 하나 고민이 될 때가 있습니다. 그럴 때는 상황에 따라서 이 것들을 사용해서 해결해주면 좋을 듯 합니다.


word-break


word-break 는 말 그대로 단어를 자르는 겁니다. 기복적으로 줄이 넘어갈 때는 단어단위로 잘려서 넘어가게 되어 있습니다. 그래서 띄어 쓰기를 하지 않고 글을 쓴다면 한 단어로 인식하여서 width 를 넘어가도 줄바꿈이 되지 않습니다. 그럴 때 word-break 를 사용해주면 줄바꿈이 가능하게 됩니다.


.selector {word-break:break-all;}

위와 같은 속성을 주게되면 위의 그림의 아래 부분과 같이 단어 중간에서도 줄바꿈이 가능하게 됩니다. 위의 그림이 잘 이해가 가지 않는다면 이 그림을 보시면 단번에 이해가 가실 것 입니다.


단어의 중간에서 줄바꿈이 되는 효과입니다. 이 것의 반대 속성은 nowrap, keep-all 등을 주면 된다는데 제가 실험해본 결과 잘 안되는 것 같습니다. 그래서 이번에 같이 소개할 white-space 를 사용하시면 됩니다.

white-space


white-space는 여러가지 값이 있는데, 정리를 해보자면 이렇습니다.

inherit 말그대로 상속 받는 것
normal 일반적인 것, default
nowrap 줄바꿈을 하지 않는다
pre <pre>태그와 같은 기능, 마크업에서 앤터로 줄바꿈 한것 만 적용이 되고 넘어가는 것에는 줄바꿈 하지 않는다
pre-line 마크업에서 줄바꿈 한 것이 적용 되면서 width를 넘어가는 텍스트도 자동으로 줄바꿈이 된다
pre-wrap pre-line 과 비슷

말로 길게 설명해 무엇합니까? 그렇다면 눈으로 확인해 봅시다.

HTML 마크업은 다음과 같이 했습니다. 줄바꿈은 왼쪽에 보이는 라인넘버에서 알 수 있듯이 2번 하였습니다. 다시말해 단락이 3개라는 뜻 입니다. 스타일은  넓이를 400px 을 주고 사방으로 padding 을 10px 씩 주었습니다.


일반적으로 랜더링하면 단어 단위로 줄바꿈이 된 형태로 나오게 되는데 여기에서 속서을 하나씩 주면 기능을 한 눈에 알 수 있습니다.

우선 inherit 은 상속되는 것이므로 넘어가고 (IE8에는 인식을 못한다고 합니다.) normal 은 기본인데 Original 과 동일하다고 보시면 됩니다. nowrap 속성을 주게되면 줄바꿈이 되지 않습니다.


그리고 pre 속성은 <pre> 태그와 동일한 역할을 합니다. 마크업에서 줄바꿈 (앤터) 해준 것을 적용해주는 것인데요, 여기서는 두번 줄바꿈을 하였기 때문에 3 단락으로 나뉘어져 있습니다. 그리고 width 를 넘어가는 텍스틑는 줄바꿈이 되지 않습니다.


다음으로 pre-line 속성을 주게되면 pre를 준 것과 같이 마크업에서 줄바꿈 한 부분에서도 줄바꿈이 되고, width 값을 넘어가는 부분에 대하여 줄바꿈이 됩니다.


per-wrap 속성을 주면 pre-line 을 적용해준 것과 동일한 결과가 나오는데 구체적인 차이는 잘 모르겠습니다. 자세한 내용은 w3cschool 을 참조해 보시는 것이 더 좋을 듯 합니다.

'IT' 카테고리의 다른 글

IIS7 에서 asp 호스팅시 Response 버퍼 제한 초과됨 오류  (0) 2014.06.27
코딩 표준 (HTML/ASP/JavaScript)  (0) 2014.01.02
IIS에 확장자를 등록하자.  (0) 2013.10.22
CSS Margin padding  (0) 2013.09.15
PNG 무손실 압축  (0) 2013.08.28
Posted by 당양부부34
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

잘 되던 Active x plugin이 동작하지 않았다.


젠장 IIS에서 확장자 등록하면 되는건데


엄청 헤맸네..

'IT' 카테고리의 다른 글

코딩 표준 (HTML/ASP/JavaScript)  (0) 2014.01.02
[CSS] 텍스트 줄바꿈 처리 word-break, white-space  (0) 2013.10.24
CSS Margin padding  (0) 2013.09.15
PNG 무손실 압축  (0) 2013.08.28
무료 웹 템플릿  (0) 2013.08.07
Posted by 당양부부34
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

자동으로 증가되는 IDENTITY(시퀀스)의 값을 변경하기 위한 쿼리.

테이블에 있는 데이터를 삭제해도 IDENTITY의 값은 변경안됨. 


아래의 쿼리를 실행하면 현재 IDENTITY의 값을 확인할 수 있다.(변경되지 않음)

DBCC CHECKIDENT(테이블명, NORESEED)



아래의 쿼리를 실행하면 IDENTITY의 값이 0로 초기화됨.

insert되면 1부터 시작.

DBCC CHECKIDENT(테이블명, RESEED, 0)


아래의 쿼리를 실행하면 IDENTITY의 값이 현재 컬럼보다 작을 경우 값을 현재 컬럼과 같도록 변경함.

DBCC CHECKIDENT(테이블명, RESEED)


Posted by 당양부부34

2013. 9. 15. 08:24 IT

CSS Margin padding

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

마진, 패딩 초기화 : * { margin : 0; padding: 0; }


Margin : 2개 이상의 엘리먼트의 마진이 겹칠 때 세로 방향 마진은 큰 마진값으로 합쳐진다.


             단, 인라인 레벨 박스, 플로팅이 지정된 문서, absolute는 마진 합쳐짐 현상이 발생하지 않는다.

'IT' 카테고리의 다른 글

[CSS] 텍스트 줄바꿈 처리 word-break, white-space  (0) 2013.10.24
IIS에 확장자를 등록하자.  (0) 2013.10.22
PNG 무손실 압축  (0) 2013.08.28
무료 웹 템플릿  (0) 2013.08.07
무료 웹디자인 : OSWD  (0) 2013.08.07
Posted by 당양부부34
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

ASP Get Parameter 작업 중 한글 데이터가 문제가 되는 경우가 있다.

그럴 때, 인코딩을 이용하면 된다.

URLEncode는 ASP에서 제공하는 것 쓰고

URLdecode는 사용자 함수를 쓰자..

왜?

한글은 2Byte문자니까.. 

그리고 Server.URLEncode로 Encoding시 % 접두사가 붙은 형태의 1Byte 문자로 인식하니까..

  

<%
Dim encodeTest : encodeTest = Server.URLencode("한글")
Dim decodeTest : decodeTest = URLDecode(encodeTest)

 

Response.Write encodeTest + "=" + decodeTest

 

'### Decode 함수 시작 ###

 

Function URLDecode(Expression)

 Dim strSource, strTemp, strResult, strchr
 Dim lngPos, AddNum, IFKor
 strSource = Replace(Expression, "+", " ")

 For lngPos = 1 To Len(strSource)
  AddNum = 2
  strTemp = Mid(strSource, lngPos, 1)
  If strTemp = "%" Then
   If lngPos + AddNum < Len(strSource) + 1 Then
    strchr = CInt("&H" & Mid(strSource, lngPos + 1, AddNum))
    If strchr > 130 Then 
     AddNum = 5
     IFKor  = Mid(strSource, lngPos + 1, AddNum)
     IFKor  = Replace(IFKor, "%", "")
     strchr = CInt("&H" & IFKor )
    End If
    strResult = strResult & Chr(strchr)
    lngPos = lngPos + AddNum
   End If
  Else
   strResult = strResult & strTemp
  End If
 Next

 URLDecode = strResult

End Function  

 

'### Decode 함수 끝 ###
%>

[출처] [ASP] URLencode, URLdecode|작성자 셰프

Posted by 당양부부34
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

mouseover와 mouseenter의 차이점

 

mouseover는 직접 이벤트를 걸지 않은 자식요소에 마우스 포인터가 와도 발생.

mouseenter는 오로지 자기 자신에게 마우스 포인터가 와야만 발생.

'IT > jquery_javascript' 카테고리의 다른 글

jQuery Select Box  (0) 2014.02.10
‘제다이급’ 자바스크립트 고수들이 전하는 6가지 개발팁  (0) 2013.11.28
jquery select selector  (0) 2013.08.23
DOM Script 정리  (0) 2013.08.21
jquery 문자열 함수  (0) 2013.08.20
Posted by 당양부부34

2013. 8. 28. 13:13 IT

PNG 무손실 압축

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

tinypng.org

Posted by 당양부부34
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

1. jQuery로 선택된 값 읽기

$("#selectBoxoption:selected").val();

$("select[name=name]").val();

2. jQuery로 선택된 내용 읽기

$("#selectBoxoption:selected").text();

3. 선택된 위치

var index =$("#test option").index($("#test option:selected"));

4. Addoptions to the end of a select

$("#selectBox").append("<optionvalue='1'>Apples</option>");

$("#selectBox").append("<optionvalue='2'>After Apples</option>");

5. Addoptions to the start of a select

$("#selectBox").prepend("<optionvalue='0'>Before Apples</option>");

6. Replaceall the options with new options

$("#selectBox").html("<optionvalue='1'>Some oranges</option><option value='2'>MoreOranges</option>");

7. Replaceitems at a certain index

$("#selectBoxoption:eq(1)").replaceWith("<option value='2'>Someapples</option>");

$("#selectBoxoption:eq(2)").replaceWith("<option value='3'>Somebananas</option>");

8. 지정된 index값으로 select 하기

$("#selectBoxoption:eq(2)").attr("selected", "selected");

9. text 값으로 select 하기

$("#selectBox").val("Someoranges").attr("selected", "selected");

10. value값으로 select 하기

$("#selectBox").val("2");

11. 지정된 인덱스값의 item 삭제

$("#selectBoxoption:eq(0)").remove();

12. 첫번째 item 삭제

$("#selectBoxoption:first").remove();

13. 마지막 item 삭제

$("#selectBoxoption:last").remove();

14. 선택된 옵션의 text 구하기

alert(!$("#selectBoxoption:selected").text());

15. 선택된 옵션의 value 구하기

alert(!$("#selectBoxoption:selected").val());

16. 선택된 옵션 index 구하기

alert(!$("#selectBoxoption").index($("#selectBox option:selected")));

17. SelecBox 아이템 갯수 구하기

alert(!$("#selectBoxoption").size());

18. 선택된 옵션 앞의 아이템 갯수

alert(!$("#selectBoxoption:selected").prevAl!l().size());

19. 선택된 옵션 후의 아이템 갯수

alert(!$("#selectBoxoption:selected").nextAll().size());

20. Insertan item in after a particular position

$("#selectBoxoption:eq(0)").after("<option value='4'>Somepears</option>");

21. Insertan item in before a particular position

$("#selectBoxoption:eq(3)").before("<option value='5'>Someapricots</option>");

22. Gettingvalues when item is selected

$("#selectBox").change(function(){

alert(!$(this).val());

alert(!$(this).children("option:selected").text());

});


Posted by 당양부부34

블로그 이미지
주요 토렌트를 블로깅하고 있습니다. 토렌트 순위 등은 다른 사이트를 찾아보세요. 주요 웹툰 순위도 게재했어요 경제를 좋아하는 일산의 행복한 프로그래머입니다.
당양부부34
Yesterday
Today
Total

달력

 « |  » 2025.7
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31

최근에 올라온 글

최근에 달린 댓글

최근에 받은 트랙백

글 보관함