如何改变这个Javascript不使用全局变量

How can change this Javascript to not use global variables?

本文关键字:Javascript 全局变量 何改变 改变      更新时间:2023-09-26

我遇到了一些麻烦,找出如何控制程序流程,而不是在我的web应用程序中使用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>

使用闭包从全局作用域中删除所有代码

(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;
        });
    });
})();

您可以使用匿名函数使其类似于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;
    });
});