Javascript |回调和空变量

时间:2018-12-05 23:01:48

标签: javascript jquery

我正在编写一个小的代码来记录来自回调的变量。到目前为止,我的代码看起来像这样。

function Run() {
  GetNumber();
  ShowNumber(); //--> (1)
}

Run();

var numero = null;

function GetNumber() {
  numero = 12;

  setTimeout(function() {
    ShowNumber(); //--> (2)
  }, 2000);
}

function ShowNumber() {
  console.log(numero);
}

注意(1)和(2)。 调用(1)时,日志为预期的“ 12”。 但是当2秒钟后调用(2)时,它将不起作用并将其扔到控制台中:

null

我尝试将bind(this)添加到匿名回调中,但是仍然出现相同的错误。为什么会这样?

2 个答案:

答案 0 :(得分:2)

此问题是声明变量的顺序。

//declare your variable before the run method, so that when the numero
//is changed inside the GetNumber method, it will change this variable
//declaring it after the run, makes it set it back to null after the run
//finishes.
var numero = null;

function Run() {

  GetNumber();
  ShowNumber(); //--> (1)
}

Run();



function GetNumber() {
  numero = 12;

  setTimeout(function() {
    ShowNumber(); //--> (2)
  }, 2000);
}

function ShowNumber() {
  console.log(numero);
}

您也可以在Run();之前声明它,它也可以正常工作。

答案 1 :(得分:1)

这里的问题是提升,变量被声明为全局变量。在一切都可以解决您的问题之前移动var。

您的代码在运行时基本上看起来像这样。

var numero = 12;
console.log(numero)
numero = null;
console.log(numero)

因此,当您像这样更改代码顺序时:

var numero = null;

function Run() {

  GetNumber();
  ShowNumber(); //--> (1)
}

Run();


function GetNumber() {
  numero = 12;

  setTimeout(function() {
    ShowNumber(); //--> (2)
  }, 2000);
}

function ShowNumber() {
  console.log(numero);
}