返回
初探函数声明、函数表达式、构造函数的三种用法
前端
2023-11-25 11:09:22
函数声明
函数声明是最传统和常用的创建函数的方式。它使用function
,后面跟函数名和参数列表,最后是用花括号括起来的一系列语句。函数声明可以出现在任何地方,包括脚本的头部、函数体内、循环体内等等。
// 函数声明
function sum(a, b) {
return a + b;
}
函数声明的一个特点是,它会在执行上下文创建时提升到该执行上下文的顶部。这意味着,函数声明可以在它被声明之前就被调用。
函数表达式
函数表达式是一种更灵活的方式来创建函数。它使用一个匿名的函数字面量,即用花括号括起来的一系列语句。函数表达式通常被赋给一个变量,以便以后可以引用它。
// 函数表达式
const sum = function(a, b) {
return a + b;
};
函数表达式不能在它被声明之前就被调用,因为在执行上下文创建时,它不会被提升。
构造函数
构造函数是一种特殊的函数,用于创建对象。它与其他函数的不同之处在于,它必须使用new
关键字来调用。当使用new
关键字调用构造函数时,会创建一个新的对象,并且该对象的[[Prototype]]
内部属性被设置为构造函数的prototype属性。
// 构造函数
function Person(name, age) {
this.name = name;
this.age = age;
}
构造函数通常用于面向对象编程中创建对象。
求和场景比较
为了更直观地理解这三种函数的用法和区别,我们来看一个求和的简单场景。
// 函数声明
function sum(a, b) {
return a + b;
}
// 函数表达式
const sum = function(a, b) {
return a + b;
};
// 构造函数
function Sum(a, b) {
this.a = a;
this.b = b;
this.sum = function() {
return this.a + this.b;
};
}
// 调用函数
console.log(sum(1, 2)); // 3
console.log(sum(3, 4)); // 7
const s1 = new Sum(1, 2);
const s2 = new Sum(3, 4);
console.log(s1.sum()); // 3
console.log(s2.sum()); // 7
从这个场景中,我们可以看到:
- 函数声明和函数表达式都可以用于求和,而且它们的调用方式是一样的。
- 构造函数也可以用于求和,但它的调用方式不同,需要使用
new
关键字来调用。 - 构造函数创建的对象有一个
sum
方法,该方法可以用来求和。
变量提升和闭包
在讨论函数声明、函数表达式和构造函数时,我们还需要了解变量提升和闭包的概念。
变量提升是指在执行上下文创建时,所有声明的变量和函数都会被提升到该执行上下文的顶部。这意味着,变量和函数可以在它们被声明之前就被使用。
闭包是指函数可以访问它所在的作用域中的变量,即使该函数已经执行完毕。这使得闭包非常适合于创建私有变量和方法。
结语
函数声明、函数表达式和构造函数是JavaScript中创建函数的三种常见方式。每种方式都有其自身的特点和用途。通过本文的介绍,希望您能够对这三种函数的用法和区别有更深入的了解。