在 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();
解释 #
-
作用域链: 在上面的示例中,
function B
被定义在function A
的内部。这意味着B
形成了一个作用域链,其作用域包含了A
的作用域。因而,B
可以访问A
中定义的变量variableInA
。 -
闭包: 在 JavaScript 中,当一个函数(如
B
)被定义在另一个函数(如A
)内部时,内层函数(B
)会形成一个闭包。闭包使得内层函数可以访问外层函数的变量,即使外层函数已经执行完毕。
总结 #
在函数 A
中定义的变量对函数 B
可见,因为 B
是在 A
的作用域中定义的。这个特性是 JavaScript 函数作用域和闭包的基本原理之一。