了解函数返回

Ram*_*One 3 javascript function

我正在创建一个简单的函数,并想将值保存到var中。为什么我必须写一份申报表?

知道解决方案,但必须理解问题。

function a() {
  console.log('This is a Test.');
}
let b = a();
console.log(b);
Run Code Online (Sandbox Code Playgroud)

结果将是:

This is a Test.
Undefined
Run Code Online (Sandbox Code Playgroud)

问题:

  1. 第一个函数调用在哪里(这是一个测试)?我以为让b = a(); 只会定义var b,而不实际运行a()函数?那么,每个变量声明var c = myfunc()实际都在运行myfunc()函数吗?
  2. 如果打印出实际的函数调用(a()),那么为什么b =未定义,这是一个测试。

解决方案显然是函数a()不返回任何内容。以我的理解,函数a()实际上会“返回”这是一个测试原因console.log()会运行吗?

bob*_*bob 8

JavaScript中的每个函数都返回一个值

很好的问题:关键是JavaScript 中的每个函数都返回一个值,无论是否给它返回值。如果您不使用return关键字告诉JavaScript返回什么,则它将返回内置的JavaScript值undefined

您没有告诉它要返回什么,所以它返回的是不确定的

因此,在您的情况下,您要告诉JavaScript解释器执行该函数a,然后将变量设置b为所返回的值a。由于您从未指定a应返回的内容,因此它将返回的内置值undefined,这就是为什么您在控制台日志中看到的内容。

关于console.logs与返回值的一句话

可能有帮助的事情:您的函数a调用console.log以打印'This is a Test.'到控制台。这与告诉a返回字符串不同'This is a Test.'。这是函数在调用时执行的操作。没有返回值,您的函数仍会返回undefined

您可能想做什么

听起来您可能希望函数a返回字符串,'This is a Test.'而不是将其打印到控制台本身。可以通过对功能进行以下更改来完成此操作:

function a() {
   return 'This is a test.';
}
Run Code Online (Sandbox Code Playgroud)