javascript问题中的全局变量

Global Variable in javascript issue

本文关键字:全局变量 问题 javascript      更新时间:2023-12-01

我有一个名为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);
    });
}); 

在过去的两个小时里,我一直在努力解决这个问题,但到目前为止,我一无所知。

提前感谢!

如果这样做:

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

如果你在控制台中看不到null,那么唯一可能的解释是你对allow的定义不是全局变量,因为有某种外部函数(比如$(document).ready()函数之类的)。

如果这两个语句之间有代码,那么另一种可能性是其他代码正在更改allow变量的值。


在变量声明前面使用var时,它会在当前作用域中定义该变量。如果当前作用域是全局的,那么该变量就是全局变量。如果当前作用域在函数内部,则该变量被定义为该函数的局部变量。


你可能可以通过两种方式中的一种来解决你的问题,这取决于你试图实现的目标。

  1. 您可以在实际的全局范围中声明您的变量,使其成为全局变量
  2. 您可以用window.allow = null为变量it的初始值赋值,而不是以其他方式声明它。这将使它成为全球性的,无论你把这个声明放在哪里
  3. 您可以将变量设为局部变量,并在使用时仅将其称为allow,而不是window.allow

仅使用allow而不是window.allow

类似:

console.log(window);

而不是

console.log(window.allow);