什么时候以及什么时候不使用functon中的'return'关键字?

时间:2019-11-07 07:40:14

标签: javascript

我在Codecademy的Java语言课程的“函数部分”中了解到:要调用函数,我们必须在函数内部使用“ return”关键字。但是在Javascript课程的“数组部分”中,可以找到一个函数,而无需在该函数内部使用'return'关键字。谁能解释我何时必须在函数内使用'return'关键字以及何时需要可选关键字? 我附上代码段供您参考。

const flowers = ['peony', 'daffodil', 'marigold'];

function addFlower(arr) {
  arr.push('lily');
}

addFlower(flowers);

8 个答案:

答案 0 :(得分:3)

return关键字仅用于从函数中获取一些值给调用者,以便以后可以使用该值。如果您不想使用该函数的任何值,则可以省略return语句。

对于对象作为参数的情况,如果该对象本身被更改,则它将也更改已传递的原始副本。因此,那时也无需从函数中返回该对象。

答案 1 :(得分:2)

该函数不必必须返回任何值。

当您不需要该函数的任何内容时,则无需返回任何内容。此函数称为void函数。

如果您需要函数提供某些值,则必须将其返回。

答案 2 :(得分:2)

实际上,使用return语句可以将值返回给调用方。例如:


function add(a, b) {
  return a+b;
}

var c = add(5,7);

如果具有仅执行任务而没有返回值的函数,则不要使用关键字。例如:

function sayHello() {
  console.log('Hello');
}

sayHello();

注意:return语句结束该函数;返回后的语句将不会执行。

答案 3 :(得分:2)

实际上,可能需要返回一个值,就像Array.prototype.push()一样。请参阅MDN Web Docs的文档。

function addOneFlower(flowers) {
  const newFlower = "Bellflowers";
  
  return flowers.push(newFlower);
}

const flowerArr = [];
let sizeOfFlowerArr = addOneFlower(flowerArr);
// sizeOfFlowerArr starts with 1

sizeOfFlowerArr = addOneFlower(flowerArr);
// sizeOfFlowerArr increased to 2

答案 4 :(得分:1)

当您可能想将信息从函数内部直接传输到调用方时,请使用return。例如,addFlower的调用者可能想知道所添加花朵的名称。那你可能会有类似的东西

const addedFlower = addFlower(flowers);

这会将addFlower的返回值分配给addedFlower变量。但是要使其正常工作,addFlower应该return一些东西,例如:

function addFlower(arr) {
  arr.push('lily');
  return 'lily';
}

如果您不需要直接从函数内部将信息 传递给调用者,则该函数的所有调用都应位于独立行中,例如

addFlower(flowers);

addFlower不需要return的任何事物(或意义)。

请注意,调用方有时可能 需要函数返回的信息,但有时调用方可能并不在意。但是该函数可能不知道哪个,因此无论如何return都应该知道,并且函数调用者可以根据需要使用结果表达式,或者调用者可以忽略它。例如,在同一脚本中,可能会有一行像

const addedFlower = addFlower(flowers);

和另一个类似

addFlower(flowers); // Don't care about the return value

在这种情况下,addFlower应该返回任何内容,而完全由调用者决定是否要对结果进行处理。

答案 5 :(得分:1)

该函数在被调用时将一直运行,直到返回return语句或结束为止。如果要使用具有返回值的函数,则需要在函数定义中包含return语句。

但是,如果您使用的函数没有return语句,并且可以一直运行到函数结尾,那么您不必在函数定义中包含return语句。例如:

function helloWorld() {
  console.log('Hello World');
}

答案 6 :(得分:0)

我能给你的简单例子就是这个。 假设您有一些要在用户输入时要计算的未知数。 例如,您问您的用户他/她何时出生,以计算其年龄。

function calcAge(yearBorn){
   var age = 2019 - yearBorn;
   return 'hello user your age is ' + age;
}
calcAge(1993);

当用户为您提供她/他出生的年份时,它将被传递到yearBorn参数并根据当前年份进行计算。但是要使用它,您应该将其退还。如果不返回它,则在调用该函数时将得到“未定义”。您以前可能已经看过console.log()函数。它仅在浏览器中的dev工具上用于开发目的。如果要使用该函数的最终结果,则应使用return关键字,然后将获得计算出的年龄,而不是“未定义”!这与功能范围有关。如果您在函数外部声明了age变量,然后在函数中重新分配了它,则可以使用age而不使用如下所示的return语句。

 var age2;
 function calcAge2(yearBorn){
    age2 = 2019 - yearBorn;
 }

调用它时,由于age2是在函数外部声明的,因此您可以从全局范围访问它。即使您没有返回它,该函数调用也会根据计算结果更新age2变量。但是在全局范围内声明变量不是一个好习惯。

答案 7 :(得分:0)

在您的示例中,您已经在函数外部声明了变量。 如果使用const flowers = ['peony','daffodil','marigold'],则只需调用该函数即可将其他项推入数组。如果您在像下面这样的函数中声明了flowers数组,尽管它不是最好的例子

function addFlower() {
    const flowers = ['peony', 'daffodil', 'marigold'];
    flowers.push('lily');
    return flowers;
}

然后,您必须使用return语句返回数组的值以供以后使用。 在您的情况下,您只是将项目添加到外部范围中声明的预先存在的数组中。 如果您不打算从函数本地范围中返回值,则不必使用return。 由于您在函数外声明了变量,因此可以像执行操作一样在不使用return语句的情况下更新这些值。但是,如果要从要使用的函数返回值,则应使用return语句。 检查以下两个示例。复制它们并在控制台中进行使用。

自从我在函数内部(在本地范围内)声明变量sum以来,第一个,我必须使用return语句来获取调用函数时计算出的值。否则,函数调用将给我未定义的值;

function add(x, y){
   let sum = x + y;
   return sum;
}

,但在第二个变量中,sum变量在全局范围内的函数外部声明。我在调用该函数时所做的全部工作就是更新预先存在的变量sum。因此,我不需要在这里使用return语句

 let sum;
    function add(x, y){
      sum = x + y;
    }

我给您的建议是,您对javascript的了解越多,这个点就会越多。只是继续学习。我去过那里。有时感觉没有任何意义。相信我,随着您学到的更多,这些点将会联系起来。