面试题答案
一键面试块级作用域特点
- 定义:块级作用域由一对花括号
{}
界定,比如if
语句块、for
循环块、while
循环块等内部都形成块级作用域。 - 特性:在块级作用域内声明的变量,其作用域仅在该块级作用域内部,外部无法访问。这有效避免了变量泄露到外部作用域导致命名冲突等问题。
函数作用域特点
- 定义:函数作用域是由函数声明所创建的作用域,函数内部声明的变量在整个函数内部都可访问。
- 特性:函数内部定义的变量,在函数外部不可见。函数参数也属于函数作用域,并且在函数内部可被访问和操作。同时,函数作用域存在变量提升现象,即变量声明会被提升到函数作用域顶部,但变量赋值不会被提升。
var
、let
和 const
声明变量时作用域的区别
var
:具有函数作用域,会发生变量提升。即在函数内部任何位置声明var
变量,都相当于在函数顶部声明,例如:
function test() {
console.log(a); // 输出: undefined
var a = 10;
}
test();
let
:具有块级作用域,不存在变量提升。let
声明的变量必须在声明后才能使用,否则会报错,例如:
{
console.log(b); // 报错: ReferenceError: b is not defined
let b = 20;
}
const
:同样具有块级作用域,不存在变量提升。并且const
声明的是常量,一旦声明必须立即初始化,且不能再次赋值,例如:
{
const c = 30;
c = 40; // 报错: Assignment to constant variable.
}
在函数内部使用 let
声明变量,子函数能否访问到该变量
在函数内部使用 let
声明的变量,在该函数内部的子函数中能访问到这个变量,因为子函数可以访问父函数的作用域,形成闭包。例如:
function outerFunction() {
let outerVar = 'I am outer variable';
function innerFunction() {
console.log(outerVar); // 输出: I am outer variable
}
innerFunction();
}
outerFunction();