全局变量在javascript(回调)中如何工作?

全局变量在javascript(回调)中如何工作?,javascript,forms,global-variables,Javascript,Forms,Global Variables,通常,在函数外部定义变量就足以使其成为全局变量。然而,就我而言,情况似乎有所不同 var username = null; function myFunction_1() { username="pippo"; myobject.myfunction(function (data){ username="mickey" }) console.log("1: ", username); } myFunction_1(); 我希望这段代码记录为1:mickey。但是,如果

通常,在函数外部定义变量就足以使其成为全局变量。然而,就我而言,情况似乎有所不同

var username = null;

function myFunction_1() {
    username="pippo";
    myobject.myfunction(function (data){ username="mickey" })
    console.log("1: ", username);
}
myFunction_1();
我希望这段代码记录为1:mickey。但是,如果我在回调函数logs 1:pippo中设置变量,则会忽略回调函数logs 1:pippo中的设置。
我错过了什么?以这种方式设置变量是不够的?

假设代码不在未显示的函数中,username是一个全局变量。如果在调用myFunction_1之前查看username的值,它将为null。如果您调用myFunction_1,然后查看用户名,它将是pippo,并将一直保持pippo,直到您执行未显示的更改操作。所以,如果您在期望pippo时看到null,它会告诉您myFunction_1是否还没有?已被调用,或者B您在调用myFunction_1后执行了一些操作,将用户名设置回null。

您的代码将从页面顶部执行,如下所示: username被声明并设置为=null->myFunction_1 get's defined->myFunction_1 get called->username被设置为'pippo'->console.logs 1:pippo->console.logs 2:pippo->myFunction_2 get's defined->myFunction_2 get called->console.logs 3:pippo假设此代码运行,则按此顺序发生,但在你的情况下却不是这样

假设salvaUsername看起来像函数salvaUsername{return username;}username为null,因为它从未达到myFunction_1中发生的赋值点。事实上,令人惊讶的是,输出不是未定义的,而是空的

更新
在这种情况下,myFunction_1从不运行,因此用户名不会设置为'pippo',因此结果就是这样。

你是说myFunction 2是秒级的吗?salvaUsername是什么?问题在于你没有显示的代码中。如果你使用,你应该看到3:皮波是的,对不起,我的错误,我的意思。我很抱歉,但在我看来,2张反对票对分散注意力似乎有点无情^^^'I-当提交表单时,它会报告3:pippo。