JavaScript复习记录(5)—作用域

作用域(scope)是一个变量、函数或对象的可访问范围。以下是JavaScript中作用域的几种类型和相关概念:

1. 全局作用域(Global Scope)

任何在全局作用域中声明的变量或函数都可以在代码的任何地方访问。全局变量在浏览器环境中会成为window对象的属性。

javascript 复制代码
var global = "global variable";

function globalFunction() {
    console.log(global); // global varable
}

2. 函数作用域(Function Scope)

在函数内部声明的变量只能在该函数内部访问。使用var声明的变量具有函数作用域。

javascript 复制代码
function functionScope() {
    var localVar = "local variable";
    console.log(localVar);
}

console.log(localVar); // Error: localVar is not defined

3. 块级作用域(Block Scope)

块级作用域由花括号{}包围的代码块定义。在letconst引入之前,JavaScript没有块级作用域。letconst允许我们在块级作用域内声明变量。

javascript 复制代码
{
    let blockVar = "I'm a block-scoped variable";
    console.log(blockVar);
}

console.log(blockVar); // Error: blockVar is not defined

4. 词法作用域(Lexical Scope)

JavaScript采用词法作用域,也称为静态作用域。这意味着函数的作用域在定义时就已经确定,而不是在调用时确定。

javascript 复制代码
function outerFunction() {
    var outerVar = "I'm outside!";

    function innerFunction() {
        console.log(outerVar); // 可以访问outerFunction中的变量
    }

    innerFunction();
}

outerFunction();

5. 闭包(Closure)

闭包是指有权访问另一个函数作用域中的变量的函数。即使外部函数已经执行完毕,内部函数仍然可以访问外部函数的变量。

javascript 复制代码
function outerFunction() {
    var outerVar = "I'm outside!";

    return function innerFunction() {
        console.log(outerVar);
    };
}

var closureFunction = outerFunction();
closureFunction(); // "I'm outside!"

6. 模块作用域(Module Scope)

在ES6中,引入了模块,模块中的变量默认具有模块作用域。一个模块的变量在其他模块中是不可见的,除非明确导出并导入。

javascript 复制代码
// module1.js
export const moduleVar = "I'm a module-scoped variable";

// module2.js
import { moduleVar } from './module1.js';
console.log(moduleVar);

作用域链(Scope Chain)

作用域链是指在当前作用域中无法找到某个变量时,JavaScript会沿着作用域链向上查找,直到找到该变量或到达全局作用域。

javascript 复制代码
var globalVar = "Global";

function outerFunction() {
    var outerVar = "Outer";

    function innerFunction() {
        var innerVar = "Inner";
        console.log(innerVar); // Inner
        console.log(outerVar); // Outer
        console.log(globalVar); // Global
    }

    innerFunction();
}

outerFunction();
相关推荐
●VON4 分钟前
React Native for OpenHarmony:项目目录结构与跨平台构建流程详解
javascript·学习·react native·react.js·架构·跨平台·von
m0_686041615 分钟前
C++中的适配器模式变体
开发语言·c++·算法
清风~徐~来9 分钟前
【视频点播系统】WebSocketpp 介绍及使用
开发语言
爱吃大芒果21 分钟前
Flutter for OpenHarmony 实战:mango_shop 路由系统的配置与页面跳转逻辑
开发语言·javascript·flutter
学***542322 分钟前
如何轻松避免网络负载过大
开发语言·网络·php
qq_1777673725 分钟前
React Native鸿蒙跨平台实现消息列表用于存储所有消息数据,筛选状态用于控制消息筛选结果
javascript·react native·react.js·ecmascript·harmonyos
RANCE_atttackkk27 分钟前
Springboot+langchain4j的RAG检索增强生成
java·开发语言·spring boot·后端·spring·ai·ai编程
梵刹古音30 分钟前
【C语言】 格式控制符与输入输出函数
c语言·开发语言·嵌入式
Acrelhuang36 分钟前
工商业用电成本高?安科瑞液冷储能一体机一站式解供能难题-安科瑞黄安南
大数据·开发语言·人工智能·物联网·安全
hello 早上好37 分钟前
03_JVM(Java Virtual Machine)的生命周期
java·开发语言·jvm