词法作用域
指的是在代码中变量和函数可见的范围是由它们在代码中定义的位置所决定的。变量和函数的作用域是在代码编写时就已经确定好的,而不是在运行时确定的。
在代码中定义了一个变量或函数时,它们就会被分配一个作用域,在作用域之外的地方,变量或函数是不可见的。
在词法作用域中,内部作用域可以访问外部作用域中的变量和函数,但是外部作用域不能访问内部作用域中的变量和函数。
举个例子,如下,在函数外部访问变量 scope 会报 ReferenceError 的错误,而在函数 logScopeInner 内打印scope,由于函数内部没有变量 scope,会向上一层寻找,打印出 ‘fun’。
function logScope() {
var scope = 'fun'
function logScopeInner() {
console.log(scope)
// 'fun'
}
logScopeInner()
}
logScope()
console.log(scope)
// ReferenceError: scope is not defined