MST

星途 面试题库

面试题:JavaScript 中变量提升在函数作用域内的表现

请解释在 JavaScript 函数作用域内变量提升的机制,并举例说明函数内声明变量和函数声明在变量提升上的区别。
45.9万 热度难度
编程语言JavaScript

知识考点

AI 面试

面试题答案

一键面试

变量提升机制

在JavaScript中,变量提升是指在函数作用域或全局作用域内,变量和函数声明会被提升到其所在作用域的顶部,而不是按照它们在代码中出现的顺序执行。这意味着变量和函数声明在声明之前就可以被使用。

变量声明和函数声明在变量提升上的区别

  1. 变量声明:使用var声明的变量会提升到作用域顶部,但不会提升初始化。即变量可以在声明之前使用,值为undefined

    console.log(x); // 输出 undefined
    var x = 5;
    
  2. 函数声明:函数声明会被提升到作用域顶部,包括函数体。所以函数可以在声明之前调用。

    greet(); // 输出 "Hello, world!"
    function greet() {
        console.log("Hello, world!");
    }
    

而函数表达式不会被提升,因为它是在赋值语句中,赋值语句不会被提升。

greet(); // 报错:greet is not a function
var greet = function() {
    console.log("Hello, world!");
};

综上所述,函数声明的提升比变量声明更完整,函数声明不仅提升声明,还提升函数体,而变量声明仅提升声明,不提升初始化。