返回
让面试官哑口无言的24个XX与XX的区别!
前端
2023-10-01 23:47:21
在面试中,面试官经常会问到各种编程概念的区别,例如let、const和var的区别,箭头函数与普通函数的区别等等。这些问题看似简单,但要回答得完整、准确并不容易。本文将总结24组常见的编程概念区别,涵盖了JavaScript、TypeScript和ES6等多种技术领域,帮助您在面试中脱颖而出。
- let、const和var的区别
特征 | let | const | var |
---|---|---|---|
声明方式 | let x = 10; |
const x = 10; |
var x = 10; |
作用域 | 块级作用域 | 块级作用域 | 全局作用域或函数作用域 |
可变性 | 可变 | 不可变 | 可变 |
声明提升 | 不存在 | 不存在 | 存在 |
暂时性死区 | 存在 | 不存在 | 不存在 |
- 箭头函数与普通函数的区别
特征 | 箭头函数 | 普通函数 |
---|---|---|
声明方式 | const sum = (a, b) => a + b; |
function sum(a, b) { return a + b; } |
语法 | 箭头函数没有函数、函数体用花括号括起来、没有参数列表括号 | 普通函数有函数关键字、函数体用花括号括起来、有参数列表括号 |
返回值 | 如果函数体只有一行,则可以省略花括号和return关键字,直接返回表达式结果;如果函数体有多行,则必须使用花括号和return关键字来返回一个值 | 必须使用return关键字来返回一个值 |
this 关键字 |
箭头函数的this 关键字指向其定义时的父级作用域中的this 关键字,而普通函数的this 关键字指向其调用时的this 关键字 |
普通函数的this 关键字指向其调用时的this 关键字 |
- 类和对象的区别
特征 | 类 | 对象 |
---|---|---|
定义方式 | class Person { ... } |
const person = new Person(); |
实例化 | 使用new 关键字 |
直接赋值 |
成员 | 包括属性和方法 | 只有属性 |
继承 | 可以继承自其他类 | 不能继承自其他类 |
- 接口和类的区别
特征 | 接口 | 类 |
---|---|---|
定义方式 | interface Person { ... } |
class Person { ... } |
实例化 | 不能实例化 | 可以实例化 |
成员 | 只包括属性和方法的声明,不包括具体实现 | 包括属性和方法的声明和具体实现 |
继承 | 可以继承自其他接口 | 可以继承自其他类 |
- 模块和命名空间的区别
特征 | 模块 | 命名空间 |
---|---|---|
定义方式 | module Person { ... } |
namespace Person { ... } |
导入 | 使用import 关键字 |
使用using 关键字 |
导出 | 使用export 关键字 |
使用public 关键字 |
作用域 | 模块的作用域是私有的,只能在模块内部使用;命名空间的作用域是公有的,可以在模块外部使用 | 命名空间的作用域是公有的,可以在模块外部使用 |
- 泛型和模板的区别
特征 | 泛型 | 模板 |
---|---|---|
定义方式 | class Person<T> { ... } |
template<typename T> class Person { ... } |
参数 | 泛型可以接受任何类型作为参数;模板只能接受特定类型的参数 | 模板只能接受特定类型的参数 |
实例化 | 泛型可以在实例化时指定类型参数;模板不能在实例化时指定类型参数 | 模板不能在实例化时指定类型参数 |
- 委托和事件的区别
特征 | 委托 | 事件 |
---|---|---|
定义方式 | public delegate void PersonEventHandler(object sender, PersonEventArgs e); |
public event PersonEventHandler PersonEvent; |
订阅 | 使用+= 运算符 |
使用+= 运算符 |
取消订阅 | 使用-= 运算符 |
使用-= 运算符 |
触发 | 使用Invoke() 方法 |
使用Raise() 方法 |
- 属性和字段的区别
特征 | 属性 | 字段 |
---|---|---|
定义方式 | public int Age { get; set; } |
public int _age; |
访问权限 | 可以使用访问修饰符来控制访问权限 | 不能使用访问修饰符来控制访问权限 |
初始化 | 可以 |