前端学习——JS进阶 (Day3)
发布人:shili8
发布时间:2025-01-03 00:03
阅读次数:0
**前端学习——JS进阶 (Day3)**### 前言在前面的两天里,我们已经掌握了 JavaScript 的基本语法和常用方法。今天,我们将继续深入探讨 JavaScript 的一些高级特性,包括函数、闭包、作用域链等。
### 一、函数####1. 函数定义JavaScript 中的函数是通过 `function` 关键字来定义的。例如:
javascriptfunction add(a, b) { return a + b; }
在这个例子中,我们定义了一个名为 `add` 的函数,它接受两个参数 `a` 和 `b`,并返回它们的和。
####2. 函数调用要使用一个函数,我们需要通过其名称来调用它。例如:
javascriptconsole.log(add(3,4)); // 输出:7
在这个例子中,我们通过 `add` 的名称来调用它,并传入两个参数 `3` 和 `4`。
####3. 函数参数函数可以接受多个参数。例如:
javascriptfunction greet(name, age) { console.log(`Hello, ${name}! You are ${age} years old.`); }
在这个例子中,我们定义了一个名为 `greet` 的函数,它接受两个参数 `name` 和 `age`。
####4. 函数返回值函数可以返回任何类型的值,包括数字、字符串、对象等。例如:
javascriptfunction getSum(a, b) { return a + b; }
在这个例子中,我们定义了一个名为 `getSum` 的函数,它接受两个参数 `a` 和 `b`,并返回它们的和。
### 二、闭包####1.什么是闭包?
闭包是一种特殊的函数,它可以访问其外部作用域中的变量。例如:
javascriptfunction outer() { let x =10; return function inner() { console.log(x); }; }
在这个例子中,我们定义了一个名为 `outer` 的函数,它返回一个名为 `inner` 的函数。
####2.闭包的作用闭包可以用于实现一些高级功能,例如:
* **记忆**:闭包可以记住其外部作用域中的变量。
* **私有变量**:闭包可以使用私有变量来避免污染全局作用域。
####3.闭包的例子
javascriptfunction createCounter() { let count =0; return function increment() { count++; console.log(count); }; } const counter1 = createCounter(); counter1(); // 输出:1counter1(); // 输出:2const counter2 = createCounter(); counter2(); // 输出:1
在这个例子中,我们定义了一个名为 `createCounter` 的函数,它返回一个名为 `increment` 的函数。每次调用 `increment` 函数时,计数器都会增加。
### 三、作用域链####1. 作用域链的概念作用域链是 JavaScript 中的一个重要概念,它决定了变量的访问权限和生命周期。
####2. 作用域链的类型作用域链可以分为以下几种:
* **全局作用域**: 全局作用域是最外层的作用域,所有变量都在此作用域中定义。
* **函数作用域**: 函数作用域是每个函数内部的作用域,函数内定义的变量都在此作用域中生命周期。
* **块作用域**: 块作用域是使用 `let` 或 `const` 关键字定义的变量所在的作用域。
####3. 作用域链的例子
javascriptfunction outer() { let x =10; function inner() { console.log(x); } return inner; } const inner = outer(); inner(); // 输出:10
在这个例子中,我们定义了一个名为 `outer` 的函数,它返回一个名为 `inner` 的函数。由于 `x` 变量位于 `outer` 函数内部的作用域链中,因此可以在 `inner` 函数中访问它。
### 总结今天我们学习了 JavaScript 中的一些高级特性,包括函数、闭包和作用域链等。这些知识对于理解 JavaScript 的复杂性和灵活性至关重要。