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