MST

星途 面试题库

面试题:JavaScript 中函数表达式与命名函数在作用域方面的区别

请阐述 JavaScript 函数表达式与命名函数在作用域规则上有何不同?并通过代码示例说明。
31.9万 热度难度
编程语言JavaScript

知识考点

AI 面试

面试题答案

一键面试
  1. 函数表达式
    • 作用域规则:函数表达式创建的函数作用域取决于它被定义的位置,遵循词法作用域规则。函数表达式在其所在的块级作用域或函数作用域内有效。
    • 代码示例
function outerFunction() {
    let localVar = 'outer variable';
    let funcExpression = function() {
        console.log(localVar);
    };
    funcExpression();
}
outerFunction();

在上述代码中,funcExpression 是一个函数表达式,它可以访问 outerFunction 作用域内的 localVar 变量。

  1. 命名函数(函数声明)
    • 作用域规则:命名函数(函数声明)具有函数提升特性,它的作用域是其所在的整个作用域链,在其定义之前也可以被调用。它不受块级作用域的限制,在全局作用域或函数作用域内都有效。
    • 代码示例
function namedFunction() {
    console.log('This is a named function');
}
namedFunction();// 可以在定义之前调用

function outer() {
    namedFunction();// 可以在函数内部调用
    function namedFunction() {
        console.log('Inner named function');
    }
}
outer();

在上述代码中,全局的 namedFunction 可以在定义之前调用,并且在 outer 函数内部重新定义了 namedFunction,它遵循函数作用域规则,优先使用内部定义的 namedFunction