javascript问题中的全局变量

时间:2013-11-28 07:40:09

标签: javascript jquery

我有一个名为allow的变量,我希望它是全局的,所以任何其他函数都可以使用它。当我从某个函数调用变量时,它会返回undefined

这是我的代码:

var allow = null;

$('#form').submit(function(e) {
    error_found = false;

    $('#text').click();


    console.log(window.allow);

    if(window.allow == false) {
        alert('מספר הסדר שהוזן הינו בשימוש, נא בחר מספר אחר, או סדר את רשימת הסדר מחדש.');
        $("#order").focus();
        e.preventDefault();
        error_found = true;
    }

    if($("#fix_rel").val() == "" && !error_found){
        alert('נא בחר זמן יחסי או קבוע.');
        $("#fix_rel").focus();
        e.preventDefault();
    }

    if($("#fix_rel option:selected").val()=="rel" && !error_found){
        if(!$.isNumeric($("#order").val())){
            alert('מספר הסדר חייב להיות מספר!');
            $("#order").focus();
            e.preventDefault();
        }

    }
});


$('#text').click(function() {
    table = $("#table").val();
    order = $("#order").val();
    $.post('test.php',{table:table,order:order}).done(function(data) {
        if(data == "true") {
            window.allow = true;
        } 
        if(data == "false") {
            window.allow = false;
        }
        console.log(window.allow);
    });
}); 

过去2个小时我一直试图解决这个问题,到目前为止,我没有任何线索。

提前致谢!

2 个答案:

答案 0 :(得分:3)

如果你这样做:

var allow = null;
console.log(window.allow);

并且您在控制台中看不到null,那么唯一可能的解释是您的allow定义不是全局变量,因为存在某种外部函数(例如{ {1}}功能或类似的东西。

如果两个语句之间存在干预代码,那么另外一种可能是其他代码正在改变$(document).ready()变量的值。


在变量声明前使用allow时,它会在当前作用域中定义该变量。如果当前范围是全局的,则该变量是全局变量。如果当前作用域位于函数内部,则该变量被定义为该函数的局部变量。


您可以根据您要完成的任务以两种方式解决您的问题。

  1. 您可以在实际全局范围内声明您的变量,使其成为全局变量。
  2. 您可以使用var为您的变量分配初始值,否则不会声明它。无论你把这个陈述放在哪里,这都会使它成为全球性的。
  3. 您可以将变量设为局部变量,并将其仅作为window.allow = null引用,而不是allow时使用它。

答案 1 :(得分:1)

仅使用allow代替window.allow

像:

console.log(window);

而不是

console.log(window.allow);