百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术分类 > 正文

晨语呢喃间!2 道 JS 与 TS 面试题剖析,静享学习好时光

ztj100 2025-06-10 04:11 70 浏览 0 评论

晨光温柔地漫过窗台,鸟儿在枝头轻声吟唱,泡一杯热气腾腾的花茶,让我们在这宁静美好的清晨时光里,抛开面试的焦虑与紧张,像和老友聊天一样,轻松地聊聊两道 JavaScript 与 TypeScript 的高频面试题,在舒缓的氛围中,为自己的知识储备悄悄 “充个电”。

第一题:JavaScript 中的闭包与内存管理

面试官常常会问:“请详细说说你对闭包的理解,它在内存管理方面需要注意什么?” 别被这个听起来有些高深的概念吓到,闭包就像是一个 “私人小仓库”,只有拥有特定 “钥匙” 的函数才能打开它,取用里面存放的 “物品”(变量和函数)。

// 定义一个外层函数,它返回一个内部函数
function outer() {
// 声明一个局部变量,这个变量会被闭包“记住”
let privateCount = 0;
return function inner() {
// 每次调用内部函数,privateCount都会自增
privateCount++;
return privateCount;
};
}
// 调用外层函数,得到一个内部函数的实例,此时闭包已经形成
const counter = outer();
console.log(counter()); // 输出1
console.log(counter()); // 输出2

在这段代码中,outer函数返回的inner函数就是一个闭包。inner函数能够记住并访问outer函数作用域内的privateCount变量,即使outer函数已经执行完毕。不过,在使用闭包时,要特别注意内存管理。如果闭包使用不当,可能会导致内存泄漏,比如一直保留着对大对象的引用,使得垃圾回收机制无法回收相关内存。所以,当闭包不再使用时,及时将相关引用设置为null,释放内存。

第二题:TypeScript 中的泛型(Generics)

“谈谈你对 TypeScript 泛型的理解,在实际开发中,泛型有哪些应用场景?” 泛型就像是一个 “万能模具”,可以根据不同的需求,生产出各种形状相同但类型不同的 “产品”,让代码在保持类型安全的同时,拥有更高的复用性。

// 定义一个简单的泛型函数,用于返回传入的参数
function identity<T>(arg: T): T {
return arg;
}
// 使用泛型函数,传入数字类型
const num = identity<number>(10);
// 使用泛型函数,传入字符串类型
const str = identity<string>('前端学习');
// 定义一个泛型接口
interface Container<T> {
value: T;
getValue(): T;
}
// 实现泛型接口,传入字符串类型
class StringContainer implements Container<string> {
constructor(public value: string) {}
getValue(): string {
return this.value;
}
}
// 实现泛型接口,传入数字类型
class NumberContainer implements Container<number> {
constructor(public value: number) {}
getValue(): number {
return this.value;
}
}

在实际开发中,泛型的应用场景非常广泛。比如在封装通用的工具函数、组件时,使用泛型可以让函数或组件适用于不同的数据类型。像数组的排序、过滤函数,或者列表组件、表格组件等,通过泛型可以提高代码的复用性,减少重复代码的编写,同时还能保证类型的准确性,让代码更加健壮。

面试应答模板

闭包与内存管理问题回答

“闭包其实就是函数和它能够访问的外部变量的组合。简单来说,当一个内部函数引用了外层函数的变量,并且这个内部函数被返回或者被保存下来,就形成了闭包。就好比一个小盒子,把函数和它需要的变量装在一起,别人不能随便动里面的东西。在实际项目里,闭包可以用来实现私有变量,保护数据不被随意修改;还能用于函数防抖和节流,优化页面性能。不过,闭包也有需要注意的地方,就是内存管理。因为闭包会使得相关变量一直存在于内存中,如果使用不当,比如过度使用闭包引用大量数据,又没有及时释放,就可能造成内存泄漏。所以,当闭包不再使用时,最好把相关的引用设为null,让垃圾回收机制可以回收内存。”

TypeScript 泛型问题回答

“TypeScript 的泛型是一种非常强大的特性,它可以让我们编写更通用、可复用的代码,同时还能保证类型安全。简单理解,泛型就像是一个‘模板’,可以在不指定具体类型的情况下,编写函数、接口或者类,等到使用的时候再确定类型。比如我写一个函数,它可以接收任意类型的数据并返回,就可以用泛型来定义。在实际开发中,泛型用得特别多,像封装一些公共的工具函数,不管传入的是数字、字符串还是对象,函数都能正常工作;还有在开发组件的时候,比如列表组件,可能会展示不同类型的数据,用泛型就能让组件适应各种数据类型,减少重复开发,而且因为有类型检查,代码出错的概率也会大大降低。”

在这悠然的清晨与上午时光里,我们一起完成了一次知识的小旅行。对于这两道面试题,你是否还有一些独特的见解?或者希望下期探讨哪些 JavaScript 和 TypeScript 的知识点?欢迎在评论区留言分享!觉得文章对你有帮助,别忘了点赞关注,明天同一时间,我们继续相约,探索更多有趣又实用的前端面试知识!

相关推荐

Linux集群自动化监控系统Zabbix集群搭建到实战

自动化监控系统...

systemd是什么如何使用_systemd/system

systemd是什么如何使用简介Systemd是一个在现代Linux发行版中广泛使用的系统和服务管理器。它负责启动系统并管理系统中运行的服务和进程。使用管理服务systemd可以用来启动、停止、...

Linux服务器日常巡检脚本分享_linux服务器监控脚本

Linux系统日常巡检脚本,巡检内容包含了,磁盘,...

7,MySQL管理员用户管理_mysql 管理员用户

一、首次设置密码1.初始化时设置(推荐)mysqld--initialize--user=mysql--datadir=/data/3306/data--basedir=/usr/local...

Python数据库编程教程:第 1 章 数据库基础与 Python 连接入门

1.1数据库的核心概念在开始Python数据库编程之前,我们需要先理解几个核心概念。数据库(Database)是按照数据结构来组织、存储和管理数据的仓库,它就像一个电子化的文件柜,能让我们高效...

Linux自定义开机自启动服务脚本_linux添加开机自启动脚本

设置WGCloud开机自动启动服务init.d目录下新建脚本在/etc/rc.d/init.d新建启动脚本wgcloudstart.sh,内容如下...

linux系统启动流程和服务管理,带你进去系统的世界

Linux启动流程Rhel6启动过程:开机自检bios-->MBR引导-->GRUB菜单-->加载内核-->init进程初始化Rhel7启动过程:开机自检BIOS-->M...

CentOS7系统如何修改主机名_centos更改主机名称

请关注本头条号,每天坚持更新原创干货技术文章。如需学习视频,请在微信搜索公众号“智传网优”直接开始自助视频学习1.前言本文将讲解CentOS7系统如何修改主机名。...

前端工程师需要熟悉的Linux服务器(SSH 终端操作)指令

在Linux服务器管理中,SSH(SecureShell)是远程操作的核心工具。以下是SSH终端操作的常用命令和技巧,涵盖连接、文件操作、系统管理等场景:一、SSH连接服务器1.基本连接...

Linux开机自启服务完全指南:3步搞定系统服务管理器配置

为什么需要配置开机自启?想象一下:电商服务器重启后,MySQL和Nginx没自动启动,整个网站瘫痪!这就是为什么开机自启是Linux运维的必备技能。自启服务能确保核心程序在系统启动时自动运行,避免人工...

Kubernetes 高可用(HA)集群部署指南

Kubernetes高可用(HA)集群部署指南本指南涵盖从概念理解、架构选择,到kubeadm高可用部署、生产优化、监控备份和运维的全流程,适用于希望搭建稳定、生产级Kubernetes集群...

Linux项目开发,你必须了解Systemd服务!

1.Systemd简介...

Linux系统systemd服务管理工具使用技巧

简介:在Linux系统里,systemd就像是所有进程的“源头”,它可是系统中PID值为1的进程哟。systemd其实是一堆工具的组合,它的作用可不止是启动操作系统这么简单,像后台服务...

Red Hat Enterprise Linux 10 安装 Kubernetes (K8s) 集群及高级管理

一、前言...

Linux下NetworkManager和network的和平共处

简介我们在使用CentoOS系统时偶尔会遇到配置都正确但network启动不了的问题,这问题经常是由NetworkManager引起的,关闭NetworkManage并取消开机启动network就能正...

取消回复欢迎 发表评论: