JavaScript全局var返回undefined

时间:2017-08-22 12:34:23

标签: javascript jquery global-variables

在我的项目中我有这个JavaScript函数,如下所示;

function refTable(clickon) {

    t_threads = document.getElementById("tab_threads");
    //Activate timeline for specific thread on active thread onclick in table
    t_line = document.getElementById("tline");
    t_lineH1 = GetElementInsideContainer("tl_tit", "tl_h4");
    var c_type = clickon;

    $.ajax({
        type: "POST",
        url: "trefresh",
        data: {},
        success: function (data) {
            t_threads.innerHTML = "";
            $.each(data, function (index) {
                var row = t_threads.insertRow(0);
                var cell1 = row.insertCell(0);
                var cell2 = row.insertCell(1);
                var cell3 = row.insertCell(2);
                var cell4 = row.insertCell(3);
                var cell5 = row.insertCell(4);
                cell1.innerHTML = data[index].OptionID;
                cell2.innerHTML = data[index].OptionKey;
                cell3.innerHTML = data[index].OptionVal;
                cell4.innerHTML = data[index].OptionVal2;
                cell5.innerHTML = data[index].OptionThread;
        });

        var rows = t_threads.rows; // or table.getElementsByTagName("tr");
        for (var i = 0; i < rows.length; i++) {
            rows[i].onclick = (function() { // closure
                var cnt = i; // save the counter to use in the function
                return function() {
                    task_det(this.cells[0].innerHTML);
                    t_line.style.visibility='visible';
                    t_lineH1.innerHTML = "TIMELINE FOR PROC. ID: "+this.cells[0].innerHTML;
                    c_type = this.cells[4].innerHTML;
                    getTline(c_type)
                    //alert("row"+cnt+" data="+this.cells[0].innerHTML);
                }    
        })(i);
    }
    }
  });

  alert(c_type);
  setTimeout(refTable.bind(c_type), 10000);
}

问题在于,只要在我的jquery函数中填充了全局变量c_type,并且在我发出警报的地方,变量结果&#39; undefined&#39;

如何让c_type全球化,并保存它的价值?

提前致谢

1 个答案:

答案 0 :(得分:1)

要使变量为全局,只需将其声明为函数

var c_type = clickon;

和其他选项可以在全局对象中定义它,在浏览器中它将是窗口..

window.c_type = clickon;

无论如何不是一个定义全局变量的好习惯,它可能会给其他第三方库带来麻烦。

注意: 确保你没有在你想要使用的函数中定义相同的变量,在这种情况下,函数将采用函数中定义的变量......