2014-07-11 2 views
1

동일한 모듈 내에서 여러 함수에서 변수를 사용해야하는 경우 변수가 전역이되지 않도록하는 가장 좋은 방법은 무엇입니까?변수를 전역으로 만들지 마십시오.

여러분도 알다시피 전역 변수를 사용할 수 있어야합니다.하지만 결국 전역에 정의 할 필요는 없습니다. 나는 그들을 함수로 감싼다?

또한 누군가이 코드를 향상시키는 방법에 대한 조언이 있으면 듣고 싶습니다. 함수에

// Info Bullet Slide Out 

var slideOut, 
    clickedButton, 
    clickedParent, 
    activeClass = 'is-active', 
    openClass = 'is-open'; 

    function closeSlideOut(){ 
     $('.tlx-img-point').removeClass(activeClass); 
     slideOut.removeClass(openClass); 
     clickedParent.removeClass(activeClass); 
    } 

    function openSlideOut(){ 
     slideOut = $('.' + clickedButton.attr('id')); 
     slideOut.addClass(openClass); 
     clickedParent.addClass(activeClass); 
     clickedButton.addClass(activeClass); 
    } 

$('.tlx-img-point').on('click', function(){ 
    clickedButton = $(this); 
    clickedParent = clickedButton.parent(); 

    // If you clicked on the same button twice just close the slideout 
    if($(this).hasClass('is-active')){ 
    closeSlideOut(); 

    // If you clicked on another info button close this one and open the new one 
    }else if(clickedParent.hasClass(activeClass)){ 
    closeSlideOut(); 
    // Delay 5ms to allow css animation to complete 
    setTimeout(function(){ 
     openSlideOut(); 
    }, 650); 

    // Open the info slide out 
    }else{ 
    openSlideOut(); 
    } 
}); 
+2

글로벌 범위가 엉망입니다 - IIFE를 사용하여 모든 것을 마무리하십시오! http://benalman.com/news/2010/11/immediately-invoked-function-expression/ –

+0

Chris, 지금 기사를 읽어 주셔서 감사합니다. – MarioD

+2

모든 것이'$ (document) .ready (function() ...) '안에 있다면 전역 범위가 아니며 그 함수의 범위에 속합니다. – Barmar

답변

5

랩의 모든 : 당신의 변수의

(function(){ 

    // all your code 

})(); 

범위는 익명, 자기 호출 기능 래퍼 될 것

여기 내 코드의 예입니다.

관련 문제