如何更改此Javascript以不使用全局变量?

时间:2011-08-20 01:23:38

标签: javascript

我在如何控制程序流方面遇到一些麻烦,而不是在我的网络应用程序中使用Javascript来使用全局变量。在此示例中,当调用get_notes()时,收到的注释的ID存储在current_note_ids数组中。调用add_to_discussion()时,current_note_ids将作为参数发送到服务器请求。如果不将current_note_ids作为全局变量,我怎么能这样做?

<script type="text/javascript">
    var current_note_ids = [];

    function add_to_discussion(){
        $.post('/add_to_discussion',{current_note_ids:current_note_ids});
    }

    function get_notes(){
        $.post('/get_note_combination',{}, function(data) {            
            current_note_ids = []; // clear existing note details
            for (i in data.notes) {
                current_note_ids.push(data.notes[i].guid);
            }
        }
    }

    $(document).ready(function() {

        $('#add_to_discussion_button').click(function(){
            add_to_discussion();
            return false;
        });

        $('#get_notes_link').click(function(){
            get_notes();
            return false;
        });

    });

</script>

2 个答案:

答案 0 :(得分:4)

这将使用closure

从全局范围中删除所有代码
(function () {

    var current_note_ids = [];

    function add_to_discussion(){
        $.post('/add_to_discussion',{current_note_ids:current_note_ids});
    }

    function get_notes(){
        $.post('/get_note_combination',{}, function(data) {            
            current_note_ids = []; // clear existing note details
            for (i in data.notes) {
                current_note_ids.push(data.notes[i].guid);
            }
        }
    }

    $(document).ready(function() {

        $('#add_to_discussion_button').click(function(){
            add_to_discussion();
            return false;
        });

        $('#get_notes_link').click(function(){
            get_notes();
            return false;
        });

    });

})();

答案 1 :(得分:1)

您可以使用匿名函数使其类似于OO。在这种情况下,您可以选择“公开”的内容。

var notes = $(function() {
    var current_note_ids = [];

    function add_to_discussion() {
        $.post('/add_to_discussion', {
            current_note_ids: current_note_ids
        });
    }

    function get_notes() {
        $.post('/get_note_combination', {}, function(data) {
            current_note_ids = []; // clear existing note details
            for (i in data.notes) {
                current_note_ids.push(data.notes[i].guid);
            }
        })
    }
    return {
        add_to_discussion: add_to_discussion,
        get_notes: get_notes
    };
})();

$(document).ready(function() {

    $('#add_to_discussion_button').click(function() {
        notes.add_to_discussion();
        return false;
    });

    $('#get_notes_link').click(function() {
        notes.get_notes();
        return false;
    });

});