2009-12-11 7 views
1

누군가가이 문제를 해결했지만 어떤 결과를 얻지 못했다고 확신합니다. 적절한 변수 범위를 유지하는 가장 빠른 방법이 무엇인지 알고 싶습니다. 오늘 아침에 작성한 jquery 코드 예제입니다.배열에 javascript 변수를 저장하십시오.

var oSignup = { 
    nTopMargin: null, 
    oBody: $("div#body"), 
    oSignup: $("div#newsletter_signup"), 
    oSignupBtn: $("div#newsletter_signup a.btn-s4") 
} 

oSignup.nTopMargin = Math.abs(oSignup.oSignup.offset().top); 
oSignup.oSignupBtn.toggle(function(){ 
    oSignup.oSignup.css({"top":0}); 
    oSignup.oBody.css({"top":oSignup.nTopMargin}); 
},function(){ 
    oSignup.oSignup.css({"top":-(oSignup.nTopMargin)}); 
    oSignup.oBody.css({"top":0}); 
}); 

이 좋은 또는 나쁜 연습입니까?

+0

좋은 또는 나쁜 연습은 무엇입니까? –

+1

작은 nitpick : 배열이 아닌 객체에 저장하고 있습니다. – cobbal

+0

@Johnathan : 변수 작성/사용에 대한 내 방법은 무엇입니까? 그리고 왜? 내 궁극적 인 질문이 될 것입니다. –

답변

2

"이상적"이 아닙니다. 여기에 문제가 있습니다 :/경기 선언 스타일을 혼합하지 마십시오

  • 모든 것이 {} 선언 범위 내에서 실시 할 수 있다면, 당신은 일을 선택하는 방법을 매우 현명 할 수없는 경우, 그것은 그런 식으로 할
  • 개체의 이름이 포함 된 필드와 같지 않아야합니다. 확실히 유효하지만 "이해하기"는 어렵고 좋은 아이디어는 아닙니다.
+0

나는 스코핑이 꽤 좋다고 생각하는데, 당신의 함수에있는 함수 중 하나가 oSignup.oSignup.css라고 말하면 전역 변수를 참조하는 것이 좋지 않다는 대신 this.oSignup.css를 사용하십시오. – Zoidberg

+1

@Zoidberg :하지만'this'는'oSignup.oSignupBtn'입니다! –

+0

예 나는 게시 한 후에 내가 한 일을 곧 깨달았다. 나는 이미 그것을 바꿨다. 내 이름 간격 오류를 제외하고, 이것이 선호되는 방법입니까? 범위가 중요하지만 속도가 더 중요합니다. 변수 생성의 표준 방법이 더 빠릅니까? IE : var foo = "bar"; –

0

저는 조이드 버그와 함께합니다. 이것은 괜찮습니다. 사실, 꽤 많이 다른 것보다 훨씬 우아합니다. 나에게서 +1 코드 리뷰를 평가할 것입니다.

1

본질적으로 당신이 말하는 것은 네임 스페이스입니다. 즉, 응용 프로그램의 변수와 로직을 다른 모든 것과 분리하여 유지해야합니다. 당신이 이것을하지 않는 함정을 알고있는 한, 당신은 다른 사람들보다 머리와 어깨가 큽니다 (현재 회사 제외).

마이클의 조언은 간결하고 사실이지만 올바른 방향으로 가고 있습니다. 이름 공간 지정에 대한 우수 사례에 대한 자세한 내용은 Google 검색의 주요 결과 대부분을 확인하십시오. 특히 Dustin Diaz's article은 밀도가 높지만 매우 다양한 방식의 네임 스페이스를 제공합니다.

관련 문제