Javascript 为什么我的数组在savetime函数中未定义,但在其他函数中正常运行?

Javascript 为什么我的数组在savetime函数中未定义,但在其他函数中正常运行?,javascript,Javascript,我正在调用我的save函数,st_bookmark和ed_bookmark数组不显示JSON stringfy函数中的任何数据数组未定义或出现未捕获类型错误 <script> var check = true; var st_bookmark = new Array(); var str_print = new Array(); var end_print = new Array();

我正在调用我的save函数,st_bookmark和ed_bookmark数组不显示JSON stringfy函数中的任何数据数组未定义或出现未捕获类型错误

  <script>
            var check = true;
            var st_bookmark = new Array();
            var str_print = new Array();
            var end_print = new Array();
            var ed_bookmark = new Array();
            </script>
        <script>
            function save() {
                var link = "M7lc1UVf-VE";
                var bk_name = $('#bookmark_name').val();
                var bk_tags = $('#bookmark_tags').val();
                var bk_email = $('#bookmark_email').val();
                var user = '@Session["email"]';
                var t = st_bookmark.pop();
                var ss = ed_bookmark.pop();
                var data = 

({ name: bk_name, tags: bk_tags, email: bk_email, link: link, start_bookmark: st_bookmark, end_bookmark: ed_bookmark }); 
                $.ajax({
                    url: '@Url.Action("save_bookmark", "chopaal")',
                    type: "POST",
                    contentType: "application/json",
                    data: { data: data },
                    success: function () {
                        window.alert('success!!');
                    }
                });

                var check = true;
                var st_bookmark = [];
                var str_print = [];
                var end_print = [];
                var ed_bookmark = [];
            }
            function starttime() {
                if (check == true) {

                    temp = player.getCurrentTime();
                    st_bookmark.push(temp);
                    str_print.push((temp / 60).toFixed(2));
                    document.getElementById("str_book").innerHTML = str_print;
                    check = false;
                } else {
                    window.alert("Please End The Previous Bookmark");
                }
            }

            function endtime() {
                if (check == false) {
                    temp = player.getCurrentTime();
                    ed_bookmark.push(temp);
                    end_print.push((temp / 60).toFixed(2));
                    document.getElementById("end_book").innerHTML = end_print;
                    check = true;
                } else {
                    window.alert("Please Add the Starting Bookmark");
                }
            }
        </script>

var检查=真;
var st_bookmark=新数组();
var str_print=新数组();
var end_print=新数组();
var ed_bookmark=新数组();
函数save(){
var link=“m7lc1uv VE”;
var bk_name=$('#bookmark_name').val();
var bk_tags=$('#bookmark_tags').val();
var bk_email=$('bookmark_email').val();
var user='@Session[“email”];
var t=st_bookmark.pop();
var ss=ed_bookmark.pop();
风险值数据=
({name:bk_name,tags:bk_tags,email:bk_email,link:link,start_bookmark:st_bookmark,end_bookmark:ed_bookmark});
$.ajax({
url:'@url.Action(“保存书签”、“chopaal”),
类型:“POST”,
contentType:“应用程序/json”,
数据:{data:data},
成功:函数(){
window.alert('success!!');
}
});
var检查=真;
var st_bookmark=[];
var str_print=[];
var end_print=[];
var ed_bookmark=[];
}
函数starttime(){
如果(检查==true){
temp=player.getCurrentTime();
st_书签推送(临时);
str_打印推送((温度/60.toFixed(2));
document.getElementById(“str_book”).innerHTML=str_print;
检查=错误;
}否则{
window.alert(“请结束上一个书签”);
}
}
函数endtime(){
如果(检查==false){
temp=player.getCurrentTime();
ed_书签推送(临时);
结束打印。推送((温度/60)。固定(2));
document.getElementById(“end_book”).innerHTML=end_print;
检查=正确;
}否则{
window.alert(“请添加起始书签”);
}
}

变量声明以JavaScript格式发布:

var data = {start_bookmark: st_bookmark};
var st_bookmark = [];
相当于

var data;
var st_bookmark;
data = {start_bookmark: st_bookmark};
st_bookmark = [];
如您所见,
st_bookmark
在获得赋值之前被访问,此时其值仍然是
未定义的

我猜您真正想要的是访问全局声明的同名变量。在这种情况下,您应该从
save
中完全删除这些类似命名变量的声明

如果要在Ajax调用成功后“重置”这些变量,则需要将赋值移到
success
回调中,并删除
var
关键字(以便标识符引用全局变量):


看起来您将它们声明了两次,第一次声明为全局变量,然后在save中声明为局部变量。save()中的注释声明,那么在初始化变量之前访问变量应该是有效的。
success: function() {
    window.alert('success!!');
    check = true;
    st_bookmark = [];
    str_print = [];
    end_print = [];
    ed_bookmark = [];
}