JS的函数

在 JavaScript 中,函数是一等公民,它是非常重要的概念。以下从函数的定义、调用、参数、返回值、作用域、闭包等多个方面详细介绍 JavaScript 函数。

函数定义



在 JavaScript 中,有多种定义函数的方式。

函数声明



javascript

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



  • 特点:函数声明具有函数提升的特性,意味着可以在函数声明之前调用该函数。



javascript

console.log(add(2, 3)); 
function add(a, b) {
    return a + b;
}

函数表达式



javascript

const subtract = function(a, b) {
    return a - b;
};



  • 特点:函数表达式不会进行提升,必须先定义后使用。

箭头函数



javascript

const multiply = (a, b) => a * b;



  • 特点:语法更简洁,没有自己的 this、arguments、super 或 new.target,通常用于简单的回调函数场景。



javascript

const numbers = [1, 2, 3];
const squared = numbers.map(num => num * num);
console.log(squared); 

函数调用



定义好的函数需要调用才能执行其中的代码。

普通调用



javascript

function greet() {
    console.log('Hello!');
}
greet(); 

作为对象方法调用



javascript

const person = {
    name: 'John',
    sayHello: function() {
        console.log(`Hello, my name is ${this.name}.`);
    }
};
person.sayHello(); 

构造函数调用



javascript

function Person(name) {
    this.name = name;
    this.sayName = function() {
        console.log(`My name is ${this.name}.`);
    };
}
const john = new Person('John');
john.sayName(); 

函数参数



函数可以接受零个或多个参数。

普通参数



javascript

function fullName(firstName, lastName) {
    return `${firstName} ${lastName}`;
}
console.log(fullName('John', 'Doe')); 

默认参数



javascript

function greet(name = 'Guest') {
    console.log(`Hello, ${name}!`);
}
greet(); 
greet('Alice'); 

剩余参数



javascript

function sum(...numbers) {
    return numbers.reduce((acc, num) => acc + num, 0);
}
console.log(sum(1, 2, 3, 4)); 

函数返回值



函数可以使用 return 语句返回一个值。



javascript

function getRandomNumber() {
    return Math.random();
}
const random = getRandomNumber();
console.log(random); 

函数作用域



函数内部可以访问外部作用域的变量,但外部作用域通常无法访问函数内部的变量。



javascript

const outerVariable = 'I am outside';
function testScope() {
    const innerVariable = 'I am inside';
    console.log(outerVariable); 
}
testScope();
// console.log(innerVariable); 

闭包



闭包是指有权访问另一个函数作用域中变量的函数。


javascript

function outerFunction() {
    const privateVariable = 'Secret';
    return function innerFunction() {
        return privateVariable;
    };
}
const closure = outerFunction();
console.log(closure()); 

函数的this关键字



this 的值在不同的调用方式下会有所不同。

全局作用域




javascript

console.log(this); 

函数内部(非严格模式)



javascript

function testThis() {
    console.log(this); 
}
testThis();

作为对象方法



javascript

const obj = {
    name: 'Example',
    printName: function() {
        console.log(this.name); 
    }
};
obj.printName();

构造函数中



javascript

function Person(name) {
    this.name = name;
    console.log(this); 
}
const newPerson = new Person('Jane');

高阶函数



高阶函数是指接受一个或多个函数作为参数,或者返回一个函数的函数。



javascript

function multiplyBy(factor) {
    return function(num) {
        return num * factor;
    };
}
const double = multiplyBy(2);
console.log(double(5)); 




以上就是 JavaScript 函数的主要内容,熟练掌握这些知识能帮助你更好地编写 JavaScript 代码。