何时以及何时不在函数中使用'return'关键字?



我在Codecademy的Javascript课程的"函数部分"中了解到:要调用函数,我们必须在函数内部使用"return"关键字。但在Javascript课程的"数组部分"中,发现一个函数可以在不使用"return"关键字的情况下调用。有人能解释一下什么时候我必须在函数中使用"return"关键字,什么时候它是可选的吗?我附上代码片段供您参考。

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

函数不必返回任何值。

当您不需要函数中的任何内容时,则不需要返回任何内容。这个函数称为void函数。

如果您需要函数中的一些值,则必须将其返回。

return关键字仅用于从函数向调用方返回一些值,以便以后可以使用该值。在这种情况下,如果不想使用函数中的任何值,可以省略return语句。

在对象作为参数的情况下,如果对象本身发生了更改,那么它也将更改传递的原始副本。所以,在那个时候,也不需要从函数返回那个对象。

通过return语句,您实际上向调用者返回了一个值。例如:


function add(a, b) {
return a+b;
}
var c = add(5,7);

如果您有一个函数只执行一个没有返回值的任务,则不使用关键字。例如:

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

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

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

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

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

const addedFlower = addFlower(flowers);

这会将addFlower的返回值分配给addedFlower变量。但要做到这一点,addFlower应该return一些东西,例如:

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

如果您不需要将信息从函数内部直接传输到调用者,那么函数的所有调用都应该在一个独立的行中,比如

addFlower(flowers);

并且CCD_ 8到CCD_。

请注意,调用者可能有时想要函数返回的信息,但有时调用者可能不关心它。但函数可能不知道是哪一个,所以不管怎样都应该return,函数的调用者可以根据需要使用结果表达式,也可以忽略它。例如,在同一脚本中,可能有一行类似

const addedFlower = addFlower(flowers);

另一个类似

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

在这种情况下,不管怎样,addFlower都应该返回一些东西,完全由调用者来处理结果。

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

但是,如果您使用的函数没有返回语句,并且它可以运行到函数结束,那么在函数定义中就不必有返回语句。例如:

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

我能给你的简单例子是这样的。比方说,当用户给你输入时,你有一些未知的数字要计算。例如,您询问用户他/她是什么时候出生的,以计算他/她的年龄。

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

当用户给你她/他出生的年份时,它将被传递给yearBorn参数,并将根据当前年份进行计算。但要使用它,你应该返回它。如果你不返回它,当你调用函数时,你会得到"undefined"。您可能以前见过console.log()函数。它仅用于浏览器中用于开发目的的开发工具。如果你想使用该函数的最终结果,你应该使用return关键字,然后你会得到计算的年龄,而不是"undefined"!这与函数范围有关。如果您在函数外声明age变量,并在函数中再次重新分配它,那么您可能可以在不使用return语句的情况下使用age,如下所示。

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

当您调用它时,由于age2是在函数外部声明的,您将能够从全局范围访问它。即使没有返回,函数调用也会根据计算结果更新age2变量。但是在全局范围内声明一个变量并不是一个好的做法。

在您的示例中,您已经在函数外部声明了变量。使用constflower=['peony','daffodil','marigold'],您只能通过调用函数来推送数组中的其他项。如果你在函数中声明了你的花数组,比如bellow,尽管这不是的最好例子

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

然后您必须使用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了解得越多,dot就会为你连接。继续学习。我去过那里。有时感觉好像什么都没有道理。相信我,随着你学到更多,这些点会联系在一起。

相关内容

最新更新