2014-07-11 109 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

謝謝克里斯,現在閱讀文章。 – MarioD

+2

如果一切都在$(document).ready(function()...)內,那麼它不在全局範圍內,它在該函數的範圍內。 – Barmar

回答

5

裹一切都變成功能:

(function(){ 

    // all your code 

})(); 

您的變量的作用域將是匿名的自我調用函數包裝。