JavaScript基础教程

JavaScript 对象

JavaScript 函数

JS HTML DOM

JS 浏览器BOM

AJAX 基础教程

JavaScript 参考手册

JavaScript 函数定义

函数允许您定义一个代码块,给它命名,然后根据需要反复执行。

可以使用function关键字定义函数,也可以使用()运算符执行函数。

函数声明

在本教程的前面,您了解了使用以下语法声明函数:

function nameOfFunction(parameters) {
  // 要执行的语句
}

声明的函数不会立即执行。声明的函数只是对函数命名,并指定函数被调用时的操作。

function greet() {
   document.write("Hello, World!");
}
测试看看

在上面的示例中,我们已经声明(定义)了一个名为的函数greet,该函数输出一条消息“ Hello,World!”。可以使用()运算符调用此功能,例如greet()。

函数表达式

JavaScript允许我们将函数分配给变量,然后将该变量用作函数。它称为函数表达式

//函数表达式可以存储在变量中
var sum = function(a, b) {
return a + b;
};
// 该变量可用作函数
var x = sum(100, 8);
测试看看

上面的函数实际上是一个匿名函数(没有名称的函数)。

存储在变量中的函数不需要函数名。始终使用变量名来调用它们。

上面的函数以分号结尾,因为它是可执行语句的一部分。

函数提升

在本教程的前面,您了解了JavaScript提升

提升是JavaScript将声明移到当前作用域顶部的默认行为。

因此,可以在声明JavaScript函数之前对其进行调用:

// 声明前调用函数
greet();

function greet() {
  document.getElementById("output").innerHTML = "Hello World";
}
测试看看

使用表达式定义的函数不会被提升。

自执行匿名函数

可以使函数表达式“自执行”。

自执行是一种JavaScript函数,它在定义后立即运行。

自动调用(启动)自执行表达式,而不需要调用它。也称为IIFE(立即调用的函数表达式)。

如果函数表达式后跟(),则函数表达式将自动执行。

(function () {
  // 要执行的语句
})();
测试看看

将IIFE分配给变量将存储函数的返回值,而不是函数定义本身:

let result = (function () {
let name = "Seagull"; 
return name; 
})(); 

//立即创建输出
result;   // "Seagull"
测试看看

下面的示例演示如何将参数传递给IIFE(立即调用的函数表达式):

(function (x, y) {
  document.getElementById("output").innerHTML = x + y;
})(5, 10);
测试看看

回调函数

回调函数是作为参数传递给另一个函数的函数,然后在外部函数中调用它来完成某种例程或操作。

function greet(name) {
  alert("Hello " + name);
}

function processInput(callback) {
  let name = prompt("Please enter your name:");
  callback(name);
}

// Passing greet function into processInput function as an argument
processInput(greet);
测试看看

上面的示例是一个同步回调,因为它将会立即执行。

但是,回调通常用于在异步操作完成后继续执行代码。

递归

递归是一种迭代操作的技术,方法是使函数重复调用自身直到获得结果。

下面的示例使用递归获取数字的阶乘:

var factorial = function(number) {
  if (number <= 0) {
 return 1;
  } else {
 return (number * factorial(number - 1));
  }
};

document.getElementById("output").innerHTML = factorial(5);
测试看看

箭头函数

到目前为止,我们已经介绍了如何使用function关键字定义函数。

但是,从ECMAScript 6开始,有一种更新,更简洁的方法来定义一个称为箭头函数表达式的函数

众所周知,箭头函数用等号后跟大于号表示:=>。

//函数表达式
var sum = function(x, y) {
   return x + y;
}

// 箭头函数
const sum = (x, y) => x + y;
测试看看

箭头函数没有自己的this。它们不适用于定义对象方法

箭头功能未提升。必须先定义它们,然后再使用它们。

使用const比使用更加安全var,因为函数表达式始终为常数。

return如果函数是单个语句,则只能省略关键字和大括号。因此,始终保留它们可能是一个好习惯。

仅当函数是单个语句时,才能省略 return 关键字和大括号。所以,永远保留使用它们是一个好习惯。

const sum = (x, y) => { return x + y };
测试看看