上一节我们详细介绍了函数的调用,本节我们将详细介绍函数调用时会使用到另一个重要概念——返回值。JS函数可以通过 return 语句返回一个值。返回值可以是任何JS数据类型,包括数字、字符串、布尔值、对象等。

下面是一个简单的函数示例,演示了如何使用 return 语句来返回一个值:

/*字符串拼接函数*/
function f(s1,s2)
{
  return `${s1}${s2}`
}
console.log(f('dotcpp','.com'));//dotcpp.com

除了返回基本数据类型的值,函数还可以返回对象或数组等复杂数据类型。例如:

  /*参数是一个对象+函数返回参数=验证函数能够返回一个对象*/
 
 function f()
 {
  const obj ={brand:'Dotcpp编程',website:'dotcpp.com',content:'do coding',storage:99999999}//准备一个对象
  return obj;
 }
console.log(f());//打印{brand: 'Dotcpp编程', website: 'dotcpp.com', content: 'do coding', storage: 99999999}

值得注意的是,当函数执行到 return 语句时,它会立即终止函数的执行,并将返回值传递给调用方。因此,如果在函数中有多个 return 语句,只有第一个执行到的 return 语句会生效,后面的 return 语句将不会执行。

另外,如果函数没有显式地使用 return 语句返回一个值,那么函数将返回一个特殊的值 undefined。

/* 没有返回语句 */
function f() {}
console.log(f());//没有返回值,打印undefined

JS函数返回值使用技巧:

1. 使用返回值进行条件判断:

  /* boolean类型判断一个三位数是不是水仙花数 */
function is_sxh(n) {

  const a = Math.floor(n / 100);      // 百位
  const b = Math.floor(n / 10) % 10;  // 十位
  const c = n % 10;                   // 个位
  
  return a*a*a + b*b*b + c*c*c === n;
}

for(let i=100;i<999;++i){
  if(is_sxh(i))console.log(i);
}
// 153
// 370
// 371
// 407

2. 使用返回值进行链式调用:

 /* 链式调用简单来说就是一个对象调用多个自身方法 */
const Dotcpp ={
  course1:"JS教程",
  course2:"C++教程",
  course3:"Java教程",
  course4:"C语言教程",
  f1(){console.log(`开始学习${this.course1}`);return this
  },
  f2(){console.log(`开始学习${this.course2}`);return this
  },
  f3(){console.log(`开始学习${this.course3}`);return this
  },
  f4(){console.log(`开始学习${this.course4}`);return this
  }
}
Dotcpp.f1().f2().f3().f4();
//开始学习JS教程
//开始学习C++教程
//开始学习Java教程
//开始学习C语言教程

3.返回对象或数组:

 /* 返回对象 */
 function f1(brand,address)
 {
  return {brand:brand,address:address}
 }
 /* 返回数组 */
function f2(a,b,c,d,e)
{
  return [a,b,c,d,e];
}
console.log(f1('Dotcpp编程','dotcpp.com'));//{brand: 'Dotcpp编程', address: 'dotcpp.com'}
console.log(f2(1,2,3,4,5));//(5) [1, 2, 3, 4, 5]

总结:本节我们详细讲解了JS中函数的返回值,包括返回类型的多样性(不仅仅是基本数据类型,还可以返回对象、数组等),返回值具有可选性(可以有返回值,也可以没有返回值);同时我们还扩展讲解了JS函数返回值的使用技巧,让读者对JS函数返回值有了更深一步的理解。

点赞(224)

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

Dotcpp在线编译      (登录可减少运行等待时间)