📜  javascript中的函数声明和函数定义(1)

📅  最后修改于: 2023-12-03 15:01:47.703000             🧑  作者: Mango

JavaScript中的函数声明和函数定义

在JavaScript中,函数是一等公民,可以像变量一样被声明、定义和传递。函数声明和函数定义是创建函数的两种主要方法,本文将详细介绍这两种方法及其区别。

函数声明

函数声明是指在代码块中直接声明函数,并且可以在任何位置调用函数。

函数声明的语法:

function functionName(parameter1, parameter2, ..., parameterN) {
  statements;
}

其中,functionName为函数名称,parameter1, parameter2, ..., parameterN为函数的参数。参数可以是任任何JavaScript类型,包括对象、数组、函数、布尔值等等。参数之间用逗号隔开。statements为函数体,即函数要执行的代码块。

以下是一个示例函数声明:

function greeting(name) {
  console.log("Hello, " + name + "!");
}

greeting("John"); // 输出 Hello, John!

在上例中,我们定义了一个名为greeting的函数,它接受一个参数name,并将"Hello, " + name + "!"字符串作为输出打印到控制台上。

函数声明可以在代码块的任何位置执行,因此可以在调用函数之前或之后声明函数,如下所示:

sayHello("Sara"); // 输出 Hello, Sara!

function sayHello(name) {
  console.log("Hello, " + name + "!");
}

在上例中,我们在调用sayHello()函数之前声明了该函数。

函数定义

函数定义也是创建函数的一种方式。函数定义的语法如下:

var functionName = function (parameter1, parameter2, ..., parameterN) { 
  statements;
};

在上述语法中,functionName是函数名(可以为任何合法的变量名),parameter1, parameter2, ..., parameterN表示函数的参数,以逗号隔开,statements为函数体,即函数要执行的代码块。

以下是一个示例函数定义:

var greeting = function(name) {
  console.log("Hello, " + name + "!");
};

greeting("John"); // 输出 Hello, John!

函数定义实际上是一种将函数赋值给变量的方法。虽然变量具有相同的行为和功能,但变量名称可以是任何有效的JavaScript标识符。函数定义必须在函数调用之前执行,否则将引发错误。

在ECMAScript 6(ES6)之前,对于存在重复函数名称的情况,函数定义被认为是有用的。在ES6中,函数定义被视为函数表达式,不能使用同一名称多次定义函数。以下是一个示例:

// 在ES6之前
function foo() {
  alert("foo");
}

function foo() {
  alert("bar");
}

foo(); // 输出 bar

// 在ES6之后
const foo = function() {
  alert("foo");
}

const foo = function() {
  alert("bar");
} // 报错:“Identifier 'foo' has already been declared”

在上例中,在ES6之前,我们可以在不同地方定义两个foo函数。在ES6之后,这被认为是不合法的,会引发错误。

总结

函数声明和函数定义都是创建函数所需的两种方法。函数声明允许在代码块中声明函数,可以在代码块的任何位置调用函数。函数定义涉及将函数赋值给变量,变量名称可以是任何有效的JavaScript标识符。函数定义必须在函数调用之前执行,否则会引发错误。对于不同的编码习惯或特定的需求,我们可以选择使用函数声明或函数定义。