面试题答案
一键面试JavaScript 函数作用域的特点
- 局部性:函数作用域内声明的变量和函数,仅在该函数内部可访问。例如:
function example() {
let localVar = 10;
console.log(localVar); // 10
}
console.log(localVar); // 报错,localVar 在此处未定义
- 函数内部屏蔽外部:如果函数内部声明了与外部作用域同名的变量,函数内部会使用自己作用域内的变量。例如:
let globalVar = 5;
function inner() {
let globalVar = 10;
console.log(globalVar); // 10
}
inner();
console.log(globalVar); // 5
- 函数声明提升:函数声明在其作用域内会被提升到顶部,意味着可以在声明之前调用函数。例如:
func();
function func() {
console.log('函数声明提升');
}
函数作用域为闭包形成提供环境的示例
闭包是指函数可以记住并访问其词法作用域,即使函数在当前词法作用域之外执行。函数作用域为闭包提供了保存变量的环境。例如:
function outer() {
let outerVar = 10;
function inner() {
console.log(outerVar);
}
return inner;
}
let closure = outer();
closure(); // 10
在上述例子中,outer
函数返回了 inner
函数。inner
函数形成了闭包,它记住了 outer
函数作用域中的 outerVar
变量。即使 outer
函数执行完毕,outerVar
变量依然被 inner
函数引用而不会被垃圾回收机制回收,closure
调用 inner
函数时能够访问到 outerVar
变量,这体现了函数作用域为闭包提供了保存变量的环境。