难道这就是JavaScript中的"闭包"

其实对于JavaScript中的"闭包"还没真正理解,这次在实际Coding中似乎遇到了"闭包"的问题,仅此摘录,以待深究.

表现为jQuery的post方法回调function内始终"拿"不到外部变量.

将代码改写成如下模式,成功了.

var reflesh = "Y";
function onOk()
{
     var pingZheng = document.getElementById("txtPinZhenNum").value;
     if (pingZheng == "")
     {
                alert("凭证号为空");
                document.getElementById("hdBtnExport").click();
                return
     }
     var anchors = document.getElementById("DbList").getElementsByTagName("a");
            
     for (var i = 0; i < anchors.length; i++) {
          if (anchors[i].style.background == "yellow")
          {
               var curr_asp_anchor = $(anchors[i]).prev()[0];
               var id = anchors[i].attributes.getNamedItem("name").value;
               $.post("CwNCExport.aspx", { getresult: "Y", id:id,pingZheng: pingZheng }, function (result) {
                        foo(curr_asp_anchor, result);
                    });
          }
     }
}

function foo(arr, result)
{
    if (result == "Y") {
        arr.click();
        var tid = setInterval(function () {
            if (reflesh == "Y") {
                window.location.href = window.location.href;
                clearInterval(tid);
            }
            reflesh = "N";
        }, 3000);
    }
    else {
        alert("凭证号重复");
        document.getElementById("txtPinZhenNum").value = pingZheng;
        document.getElementById("hdBtnExport").click();
    }
}
原文地址:https://www.cnblogs.com/zhuji/p/5824794.html