六维教程

JavaScript 函数的定义与调用

写代码时经常出现同一段逻辑要重复使用。比如给用户打招呼,两个人要写两遍相同的代码,十个人就要写十遍,改起来也很痛苦。函数就是解决这个问题的工具。把一段代码封装起来起个名字,需要时调用名字就行,一次定义多次使用。

函数是 JavaScript 里组织代码的核心方式,后面要学的作用域、闭包、对象方法都建立在函数之上。这篇先把函数的定义和调用讲清楚。

函数声明

用 function 关键字声明函数,后面跟函数名和括号,花括号里是函数体。

function greet() {
  console.log('你好,欢迎光临');
}

这里声明了一个名为 greet 的函数,函数体只有一条输出语句。声明本身不会执行,只有调用才会运行函数体。

函数调用

调用函数就是在函数名后面加括号,可以调用任意多次。

greet();
greet();

输出两行”你好,欢迎光临”。函数也可以带参数,让同一个函数处理不同的输入。参数写在函数名的括号里,函数体内可以使用。看一个求和函数的完整例子

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

const result = add(3, 5);
console.log(result); // 输出 8

a 和 b 是形参,调用时传入的 3 和 5 是实参。a 接住 3,b 接住 5,函数返回 8 给 result。参数的细节下一篇专门讲,这里先会用。

return 返回值

上面的 add 用了 return,return 后面跟的值就是函数的结果。调用函数时,这个值可以赋给变量继续使用。

return 还有第二个作用。一旦执行到 return,函数立即结束,后面的代码不再执行。可以利用这一点提前退出。比如检查分数是否合法

function checkScore(score) {
  if (score < 0 || score > 100) {
    return '分数不合法'; // 提前返回,后面不执行
  }

  if (score >= 60) {
    return '及格';
  } else {
    return '不及格';
  }
}

console.log(checkScore(150)); // 输出 分数不合法
console.log(checkScore(70));  // 输出 及格

return 可以出现在函数体的任何位置,执行到就结束整个函数,后面的语句不会再跑。

没有 return 返回 undefined

函数不是必须写 return。没有 return 的函数,调用后得到 undefined。有些函数只需要做输出这类操作,不需要返回结果。

function sayHello() {
  console.log('你好');
}

const result = sayHello();
console.log(result); // 输出 undefined

sayHello 只输出不返回,result 就是 undefined。undefined 在数据类型那篇讲过,表示”没有值”。调用没有 return 的函数是很常见的写法,记住它的结果是 undefined 就行。

函数的另一种创建方式

除了 function 声明,还可以把函数赋值给变量

const greet = function () {
  console.log('你好');
};

这种写法叫函数表达式,右侧是一个没有名字的匿名函数,整个表达式赋值给 const 变量。看起来差不多,但两者有几个重要区别,后面有专门一篇详细讲。现在知道有这种写法就行。

小结

  • 函数把一段代码封装起来,用 function 关键字声明,用 函数名() 调用,一次定义多次使用。
  • 参数写在函数名后面的括号里,调用时传入的值会在函数体内参与运算。
  • return 返回函数的结果并立即结束函数,可以用于提前退出。
  • 没有 return 的函数调用后得到 undefined。
  • 函数也可以写成 const fn = function() {} 的形式,后面专门有一篇讲区别。
上一篇
JavaScript for 循环
下一篇
JavaScript 函数参数