解释词法作用域的概念
主题
JavaScript
在GitHub上编辑
TL;DR
词法作用域意味着变量的作用域由其在源代码中的位置决定,嵌套函数可以访问在其外部作用域中声明的变量。例如:
function outerFunction() {let outerVariable = 'I am outside!';function innerFunction() {console.log(outerVariable); // 'I am outside!'}innerFunction();}outerFunction();
在这个例子中,innerFunction
可以访问 outerVariable
,因为词法作用域。
词法作用域
词法作用域是 JavaScript 和许多其他编程语言中的一个基本概念。它决定了在嵌套函数中如何解析变量名。变量的作用域由其在源代码中的位置定义,嵌套函数可以访问在其外部作用域中声明的变量。
词法作用域的工作原理
当一个函数被定义时,它会捕获创建它的作用域。这意味着该函数可以访问其自身作用域中的变量以及任何包含(外部)作用域中的变量。
例子
考虑以下示例:
function outerFunction() {let outerVariable = 'I am outside!';function innerFunction() {console.log(outerVariable); // 'I am outside!'}innerFunction();}outerFunction();
在这个例子中:
outerFunction
声明一个变量outerVariable
。innerFunction
嵌套在outerFunction
内部,并将outerVariable
记录到控制台。- 当调用
innerFunction
时,由于词法作用域,它可以访问outerVariable
。
嵌套函数和闭包
词法作用域与闭包密切相关。当一个函数保留对其词法作用域的访问权限时,即使该函数在作用域之外执行,也会创建一个闭包。
function outerFunction() {let outerVariable = 'I am outside!';function innerFunction() {console.log(outerVariable);}return innerFunction;}const myInnerFunction = outerFunction();myInnerFunction(); // 'I am outside!'
在这个例子中:
outerFunction
返回innerFunction
。myInnerFunction
被赋值为返回的innerFunction
。- 当调用
myInnerFunction
时,它仍然可以访问outerVariable
,因为词法作用域创建了闭包。