在 JavaScript 中,函数 B 能访问在函数 A 内部定义的变量。这是由于 JavaScript 的词法作用域(Lexical Scope)特性。下面是详细解释和示例:

词法作用域 #

词法作用域意味着函数的作用域是根据其定义的位置来确定的,而不是调用的位置。也就是说,内部函数可以访问其外部函数中的变量。

示例代码 #

function A() {
    // 在函数A中定义的变量
    let variableInA = 'Hello from A';

    function B() {
        // 函数B可以访问变量在函数A中的定义
        console.log(variableInA); // 输出: Hello from A
    }

    // 调用函数B
    B();
}

// 调用函数A
A();

解释 #

  1. 作用域链: 在上面的示例中,function B 被定义在 function A 的内部。这意味着 B 形成了一个作用域链,其作用域包含了 A 的作用域。因而,B 可以访问 A 中定义的变量 variableInA

  2. 闭包: 在 JavaScript 中,当一个函数(如 B)被定义在另一个函数(如 A)内部时,内层函数(B)会形成一个闭包。闭包使得内层函数可以访问外层函数的变量,即使外层函数已经执行完毕。

总结 #

在函数 A 中定义的变量对函数 B 可见,因为 B 是在 A 的作用域中定义的。这个特性是 JavaScript 函数作用域和闭包的基本原理之一。