MST

星途 面试题库

面试题:JavaScript变量声明与作用域之函数作用域解析

请描述JavaScript函数作用域中变量声明提升的规则,并举例说明函数内部声明的变量在函数不同位置的访问情况。
22.5万 热度难度
编程语言JavaScript

知识考点

AI 面试

面试题答案

一键面试

变量声明提升规则

在JavaScript函数作用域中,变量声明会被提升到函数作用域的顶部,但变量的赋值不会提升。这意味着在变量声明语句之前就可以使用该变量,然而此时变量的值为undefined,因为赋值操作仍在原位置执行。

函数内部变量不同位置访问情况举例

function test() {
    console.log(a); // 输出: undefined
    var a = 1;
    console.log(a); // 输出: 1
}
test();

在上述例子中,变量a的声明被提升到函数顶部,但赋值语句仍在原来位置。所以第一次console.log(a)时,变量a已声明但未赋值,输出undefined;第二次console.log(a)时,变量a已赋值,输出1

再看一个包含块级作用域(ES6之前JavaScript没有真正块级作用域概念,这里以{}模拟)的例子:

function test2() {
    console.log(b); // 输出: undefined
    if (true) {
        var b = 2;
        console.log(b); // 输出: 2
    }
    console.log(b); // 输出: 2
}
test2();

这里虽然b的声明在if块内,但由于JavaScript函数作用域特性,b的声明提升到函数顶部。所以在if块外也能访问到b,并且if块内外访问的是同一个变量b