【问题标题】:How do global variable work in javascript (callback)?javascript(回调)中的全局变量如何工作?
【发布时间】:2014-09-14 18:12:52
【问题描述】:

通常,在函数外部定义一个变量就足以让它成为“全局”的。然而,就我而言,情况似乎有所不同。

var username = null;

function myFunction_1() {
    username="pippo";
    myobject.myfunction(function (data){ username="mickey" })
    console.log("1: ", username);
}
myFunction_1();

我希望这段代码会记录“1: mickey”。但是,如果我在回调函数日志中设置变量“1:pippo”,那么在回调中的设置将被忽略。 我错过了什么?这样设置变量还不够?

【问题讨论】:

  • 你的意思是 myFunction2 秒吗?
  • 什么是salvaUsername
  • 问题出在您没有显示的代码中。如果您使用<form onsubmit="myFunction_2()">,您应该会看到“3: pippo”
  • 是的,对不起,我的错误,我的意思是
    。 (我很抱歉,但在我看来分心的 2 次反对票似乎有点无情 ^^')
  • I can't reproduce the problem - 提交表单时报告3: pippo

标签: javascript forms global-variables


【解决方案1】:

假设代码不在您未显示的函数内,username 是一个全局变量。如果您在调用myFunction_1 之前查看username 的值,它将是null。如果您调用myFunction_1,然后查看username,它将是"pippo"(并且它将保持"pippo",直到您执行未显示的更改来更改它)。因此,如果您在期望 "pippo" 时看到 null,它会告诉您 A)myFunction_1 尚未(还没有?)被调用,或者 B)您在调用 myFunction_1 之后做了一些事情usernamenull

【讨论】:

    【解决方案2】:

    您的代码正在从页面顶部执行如下:
    username 被声明并设置为 = null -> myFunction_1() 已定义 -> myFunction_1() 被调用 -> username被设置为'pippo' -> console.logs "1: pippo" -> console.logs "2: pippo" -> myFunction_2() 已定义 -> myFunction_2() 被调用 -> console.logs "3: pippo" 这发生在这个序列中,假设这段代码运行,在你的情况下它没有运行。

    假设salvaUsername() 看起来像function salvaUsername(){ return username; } 用户名是空的,因为它从未到达myFunction_1() 中发生的分配点。 (实际上输出不是undefined 而是null,这确实令人惊讶。

    更新 在这种情况下,myFunction_1() 永远不会运行,因此username 不会设置为'pippo',因此会出现结果。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-11-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多