前言
最近也是到了春招的黄金时期,许多小伙伴们是不是像我一样,开始了面试呢?在准备面试的过程中,我也会去网上寻找一些博主的面经进行查漏补缺,所以我也希望在我面试完后写的面经可以帮助到一些小伙伴。3月即将过去,大家4月也要加油。
正文
自我介绍
首先,一般刚进入面试时,面试官通常会叫你自我介绍:我是谁+从哪里来+我做过什么+有什么成绩+为什么能胜任。
面试官您好,我叫xxx,某某大学25届软件工程专业,想来贵公司参前端岗位实习。平时热爱学习,课余时间也会打打篮球,参加各种社团俱乐部丰富自己的社交范围和兴趣爱好。在校被评为优秀学生,优秀班干部,拿过校级奖学金。个人比较喜欢前端,也用node写一些简单的后端代码。仔细读过《你不知道的Javascript》。同时,在学习前端知识的过程中,也会在掘金上写写JS系列基础和底层的文章,并是掘金的优秀创作者,掘金创作者等级五级,2023年度优秀作者No.37名。阅读过vue、axios、ElementPlus的源码,未来会持续学习。
介绍一下你的项目
这基本上也是必问的一环,当你自我介绍完之后,面试官便会让你介绍一下你自己的项目。当你介绍完你的项目,面试官就会追问你的项目中的一些东西是怎么实现的,或者让你详细的介绍一下这个东西。 比如在我的项目中,我使用了token
和路由守卫
,所以经常会有面试官询问我这两个东西。
tailwind有什么优势?
这是袋鼠云的一个面试官所提出的问题,看到我在简历上写了了解tailwind
,你能说一下tailwind的优势吗?
- 快速开发: Tailwind提供了一组预定义的可重用的样式类,使得开发者可以快速构建界面而不必编写大量的自定义CSS。
- 灵活性: Tailwind采用原子类(Atomic CSS)的方式,即每个类都对应一个特定的CSS样式属性,不必担心样式之间的冲突。
- 响应式设计: Tailwind提供了一组响应式的工具类,使得开发者可以轻松地实现响应式设计,并根据不同的屏幕尺寸调整布局和样式。 满足项目的需求。
普通函数和箭头函数有什么区别
-
语法形式:
- 普通函数使用
function
关键字来定义,例如:function add(a, b) { return a + b; }
- 箭头函数使用箭头符号
=>
来定义,例如:const add = (a, b) => a + b;
- 普通函数使用
-
this 的指向:
- 在普通函数中,
this
的值在运行时动态绑定,它的值取决于函数是如何被调用的。在全局作用域中,this
指向全局对象(在浏览器环境中是window
对象);在函数内部,this
指向调用该函数的对象(如果有)。 - 在箭头函数中,
this
的值是在定义函数时确定的,它捕获了所在上下文的this
值。换句话说,箭头函数没有自己的this
绑定,它继承了外围作用域的this
值。
- 在普通函数中,
-
arguments 对象:
- 在普通函数中,可以使用
arguments
对象访问传递给函数的参数列表,它是一个类数组对象。 - 在箭头函数中,没有自己的
arguments
对象,但可以使用ES6的剩余参数语法...args
来获取所有传递给函数的参数。
- 在普通函数中,可以使用
-
构造函数:
- 普通函数可以作为构造函数使用,并且可以使用
new
关键字来创建实例。 - 箭头函数不能被用作构造函数,因此不能使用
new
关键字来创建实例。
- 普通函数可以作为构造函数使用,并且可以使用
你有听过严格模式吗
- 禁止使用全局变量: 在严格模式下,全局作用域中的变量必须显式声明,否则会抛出错误。这样可以防止意外地创建全局变量,提高代码的健壮性和可维护性。
- 禁止删除变量和函数: 在严格模式下,使用
delete
操作符删除变量或函数会抛出错误。这可以防止意外删除变量或函数,增加了代码的可靠性。 - 禁止使用未声明的变量: 在严格模式下,使用未声明的变量会抛出错误。这可以帮助开发者及时发现潜在的拼写错误或变量声明遗漏。
- 禁止重复的属性名: 在严格模式下,对象字面量中重复的属性名会导致语法错误。这可以避免一些错误的对象定义,提高代码的可读性和可维护性。
- 禁止使用
with
语句: 在严格模式下,with
语句会导致语法错误。这是因为with
语句会引入变量的隐式作用域,容易引发混乱和错误,因此被弃用。 - 限制
eval
的使用: 在严格模式下,eval
函数会在其自身的作用域中运行,而不会在调用它的作用域中创建新的变量或函数。这样可以减少eval
的潜在危险性,提高代码的安全性。
要在整个脚本文件或函数内启用严格模式,可以在文件或函数的开头添加 'use strict';
。例如:
js
'use strict';
// 这是严格模式下的代码
function strictFunction() {
'use strict';
// 这是严格模式下的函数
}
在严格模式下,this
的行为与非严格模式下有一些不同之处。主要的区别在于在函数内部的 this
的指向。
在非严格模式下:
- 如果函数被作为普通函数调用(而非作为对象的方法),
this
会指向全局对象(在浏览器中是window
对象)。 - 如果函数作为对象的方法调用,
this
会指向调用该函数的对象。
而在严格模式下:
- 如果函数被作为普通函数调用,
this
的值不再指向全局对象,而是undefined
。 - 如果函数作为对象的方法调用,
this
会继续指向调用该函数的对象。
下面是一些示例来说明严格模式下 this
的行为:
js
'use strict';
function strictModeFunction() {
console.log(this); // 输出:undefined
}
strictModeFunction(); // 在严格模式下调用普通函数,this 是 undefined
const obj = {
name: 'Alice',
greet: function() {
console.log(this.name);
}
};
obj.greet(); // 输出:Alice,在严格模式下调用对象的方法,this 仍然指向对象 obj
除了使用 'use strict'
字符串指令显式开启严格模式,有些情况下 JavaScript 会隐式地开启严格模式。这些情况包括:
- 模块化: 当使用 ECMAScript 6 的模块化语法时,即使用
import
和export
来导入和导出模块时,模块内部会自动进入严格模式。 - 类: 在 ECMAScript 6 中引入了类(class)的概念。在类的内部(包括类的构造函数和方法)默认是严格模式的。
- JavaScript 模块: 在一些特定的环境中,比如 Node.js,执行模块文件时会默认开启严格模式。