返回

让面试官哑口无言的24个XX与XX的区别!

前端

在面试中,面试官经常会问到各种编程概念的区别,例如let、const和var的区别,箭头函数与普通函数的区别等等。这些问题看似简单,但要回答得完整、准确并不容易。本文将总结24组常见的编程概念区别,涵盖了JavaScript、TypeScript和ES6等多种技术领域,帮助您在面试中脱颖而出。

  1. let、const和var的区别
特征 let const var
声明方式 let x = 10; const x = 10; var x = 10;
作用域 块级作用域 块级作用域 全局作用域或函数作用域
可变性 可变 不可变 可变
声明提升 不存在 不存在 存在
暂时性死区 存在 不存在 不存在
  1. 箭头函数与普通函数的区别
特征 箭头函数 普通函数
声明方式 const sum = (a, b) => a + b; function sum(a, b) { return a + b; }
语法 箭头函数没有函数、函数体用花括号括起来、没有参数列表括号 普通函数有函数关键字、函数体用花括号括起来、有参数列表括号
返回值 如果函数体只有一行,则可以省略花括号和return关键字,直接返回表达式结果;如果函数体有多行,则必须使用花括号和return关键字来返回一个值 必须使用return关键字来返回一个值
this关键字 箭头函数的this关键字指向其定义时的父级作用域中的this关键字,而普通函数的this关键字指向其调用时的this关键字 普通函数的this关键字指向其调用时的this关键字
  1. 类和对象的区别
特征 对象
定义方式 class Person { ... } const person = new Person();
实例化 使用new关键字 直接赋值
成员 包括属性和方法 只有属性
继承 可以继承自其他类 不能继承自其他类
  1. 接口和类的区别
特征 接口
定义方式 interface Person { ... } class Person { ... }
实例化 不能实例化 可以实例化
成员 只包括属性和方法的声明,不包括具体实现 包括属性和方法的声明和具体实现
继承 可以继承自其他接口 可以继承自其他类
  1. 模块和命名空间的区别
特征 模块 命名空间
定义方式 module Person { ... } namespace Person { ... }
导入 使用import关键字 使用using关键字
导出 使用export关键字 使用public关键字
作用域 模块的作用域是私有的,只能在模块内部使用;命名空间的作用域是公有的,可以在模块外部使用 命名空间的作用域是公有的,可以在模块外部使用
  1. 泛型和模板的区别
特征 泛型 模板
定义方式 class Person<T> { ... } template<typename T> class Person { ... }
参数 泛型可以接受任何类型作为参数;模板只能接受特定类型的参数 模板只能接受特定类型的参数
实例化 泛型可以在实例化时指定类型参数;模板不能在实例化时指定类型参数 模板不能在实例化时指定类型参数
  1. 委托和事件的区别
特征 委托 事件
定义方式 public delegate void PersonEventHandler(object sender, PersonEventArgs e); public event PersonEventHandler PersonEvent;
订阅 使用+=运算符 使用+=运算符
取消订阅 使用-=运算符 使用-=运算符
触发 使用Invoke()方法 使用Raise()方法
  1. 属性和字段的区别
特征 属性 字段
定义方式 public int Age { get; set; } public int _age;
访问权限 可以使用访问修饰符来控制访问权限 不能使用访问修饰符来控制访问权限
初始化 可以