MST

星途 面试题库

面试题:JavaScript 闭包与this理解之基础应用

请解释 JavaScript 中闭包的概念,并举例说明闭包如何访问外部函数的变量。同时,说明在以下代码中 `this` 的指向是什么,并解释原因: ```javascript function outer() { var num = 10; function inner() { console.log(this); } inner(); } outer(); ```
27.5万 热度难度
编程语言JavaScript

知识考点

AI 面试

面试题答案

一键面试

闭包概念

闭包是指在 JavaScript 中,函数内部可以访问其外部函数作用域中的变量,即使外部函数已经执行完毕,这些变量依然可以被内部函数访问和操作。简单来说,闭包就是函数和其周围状态(词法环境)的组合。

闭包访问外部函数变量示例

function outer() {
    var name = 'John';
    function inner() {
        console.log(name); // 访问外部函数的变量name
    }
    return inner;
}
var func = outer();
func(); // 输出 'John'

在上述代码中,inner 函数形成了闭包,它可以访问 outer 函数中的变量 name。即使 outer 函数已经执行结束,name 变量由于被 inner 函数引用(闭包的作用),依然存在于内存中,所以通过 func() 调用 inner 函数时能够正确输出 name 的值。

代码中 this 的指向及原因

在给定的代码:

function outer() {
    var num = 10;
    function inner() {
        console.log(this);
    }
    inner();
}
outer();

在非严格模式下,this 指向全局对象(在浏览器环境中是 window 对象)。原因是,当 inner 函数被调用时,它是作为一个普通函数直接调用的(inner()),没有明确指定调用它的对象,所以在非严格模式下,this 默认指向全局对象。

在严格模式下,如果将上述代码放在严格模式中(例如在函数 outer 内部第一行添加 "use strict";),this 会指向 undefined。因为在严格模式下,普通函数调用时 this 不会自动指向全局对象,如果没有明确指定 this 的指向,this 就是 undefined