从简单的 setInterval 函数中获取返回值

Get a returned value from a simple setInterval function

为什么如果我有一个函数 returns 每次调用该函数时它都会在控制台中显示一个值,但是如果我将相同的函数放在 setInterval 中它会退出返回价值。即:

function run() {
    return 'Hello world';
}

a = setInterval(run, 1000); //'Hello world' is not shown in the console every second

//Calling run() returns 'Hello world' to the console
run(); //'Hello world'

而不是 return Hello World,如果这是您想要的效果,您应该 console.log("Hello World")。您的脚本正在按照您的预期进行解释。它是 运行 每秒 return 次 "Hello World" 的函数。但是,在包含该功能之前,returned 字符串不会记录到控制台。

function run() {
  console.log("Hello world");
  return 'Hello world';
}

setInterval的目的是每X毫秒执行一个函数。在您的原始代码中,每次 run 函数 returns 时,它都会返回到本机 setInterval 函数的上下文。 setInterval 函数不会 console.log 自动为您计算出来。

当您 运行 您的代码 run(); 时,它 returns 的值 Hello world。您在屏幕上看到它的值的唯一原因是控制台计算表达式和 returns 它的值供您查看。

您的目标不是控制台作为代码中的输出流,但是当您从控制台调用 运行() 时,它只是 returns 字符串到控制台,可以尝试回调:

var run = function(fn){
    fn("hello world");//invoke the callback function
};

setTimeout(function(){
  run(alert);//target output to alert
  run(console.log);//now its console
}, 500);

利亚姆是正确的。这是有点迷惑的地方:

Calling run() returns 'Hello world' to the console 而不是 正在发生的事情。将 run() returns "Hello world" 调用到函数的 调用者 .

如果您在控制台中输入表达式,表达式的值将输出到控制台。如果您输入 1+1,您将得到 2。如果您输入 Math.sqrt(25),您将得到 5。所以如果你输入 run() 你会得到 Hello world.