【转载】前端面试技巧:面试频繁出现的几个易错点

掌握这些前端面试技巧,助你轻松跳槽! 项目的成功始于对需求的深刻理解。这需要我们不仅仅关注客户的要求,更要挖掘他们的潜在需求,深入业务场景,以确保提供出真正符合用户期待的解决方案。理解项目需求需要全面地搜集信息,并与团队成员共同讨论,确保每个成员都对需求有着清晰的认识。在项目开始之前,需求分析是不可或缺的一步。这涉及与客户的沟通,以理解他们的业务目标,同时也要通过市场调研来了解用户的真实需求。采用合适的工具,如需求管理软件或敏捷看板,可以帮助团队更有效地收集、分析和跟踪需求。 阅读详情

转自:https://www.imooc.com/article/details/id/24488

1.前言

这段时间,金三银四,很多人面试,很多人分享面试题。在前段时间,我也临时担任面试官,为了大概了解面试者的水平,我也写了一份题目,面试了几个前端开发者。在这段时间里面,我在学,在写设计模式的一些知识,想不到的设计模式的这些知识,就是面试题里面,频繁让人掉坑的考点。所以,今天就总结一下,那些让人掉坑的考点。

2.面向对象编程

关于面向对象和面向过程,个人觉得这两者都是绝对独立的,而是相互相成的关系。至于什么时候用面向对象,什么时候用面向过程,具体情况,具体分析。

针对于面向对象编程的。知乎上有一个高赞回答:

面向对象: 狗.吃(屎)
面向过程: 吃.(狗,屎)

但是这个例子觉得不太优雅,我改一下了,举一个优雅些的小例子说明一下面向对象和面向过程的区别。

需求:定义‘守候吃火锅’

面向对象的思想是:守候.动作(吃火锅)

面向过程的思想是:动作(守候,吃火锅)

代码实现方面:

//面向对象
//定义人(姓名,性别,年龄)
let People=function(name){
    this.name=name;
}
//动作
People.prototype={
    eat:function(someThing){
        console.log(`${this.name}吃${someThing}`);
    }
}
//守候是个人,所以要创建一个人(new一次People)
let shouhou=new People('守候','男',24);
shouhou.eat('火锅');

//面向过程
let eat=function(who,someThing){
    console.log(`${who}吃${someThing}`);
}
eat('守候','火锅');

结果都一样,都是输出‘守候吃火锅’。但是万一我现在吃饱了,准备写代码了。这下怎么实现呢?看代码

//面向对象
shouhou.coding=function(){
    console.log(this.name+'写代码');
}
shouhou.coding();
//面向过程
let coding=function(who){
    console.log(who+'写代码');
}
coding('守候');

结果也一样:‘守候写代码’

但是不难发现面向对象更加的灵活,复用性和扩展性更加。因为面向对象就是针对对象(例子中的:‘守候’)来进行执行某些动作。这些动作可以自定义扩展。
而面向过程是定义很多的动作,来指定谁来执行这个动作。

好了,面向对象的简单说明就到这里了,至于面向对象的三大特性:继承,封装,多态这个自行上网查找资料。

3.this

使用 JavaScript 开发的时候,很多开发者多多少少会被 this 的指向搞蒙圈,但是实际上,关于 this 的指向,记住最核心的一句话:哪个对象调用函数,函数里面的this指向哪个对象。

下面分几种情况谈论下

3-1.普通函数调用

这个情况没特殊意外,就是指向全局对象-window。

let username='守候'
function fn(){
    alert(this.username);//underfind
}
fu();

可能大家会困惑,为什么不是输出守候,但是在细看一看,我声明的方式是let,不会是window对象
如果输出守候,要这样写

var username='守候'
function fn(){
    alert(this.username);//守候
}
fu();
//---------------
window.username='守候'
function fn(){
    alert(this.username);//守候
}
fu();

3-2.对象函数调用

这个相信不难理解,就是那个函数调用,this指向哪里

window.b=2222
let obj={
    a:111,
    fn:function(){
        alert(this.a);//111
        alert(this.b);//underfind
    }
}
obj.fn();

很明显,第一次就是输出obj.a,就是111。而第二次,obj没有b这个属性,所以输出underfind,因为this指向obj。

但是下面这个情况得注意

let obj1={
    a:222
};
let obj2={
    a:111,
    fn:function(){
        alert(this.a);
    }
}
obj1.fn=obj2.fn;
obj1.fn();//222

这个相信也不难理解,虽然obj1.fn是从obj2.fn赋值而来,但是调用函数的是obj1,所以this指向obj1。

3-3.构造函数调用

let TestClass=function(){
    this.name='111';
}
let subClass=new TestClass();
subClass.name='守候';
console.log(subClass.name);//守候
let subClass1=new TestClass();
console.log(subClass1.name)//111

这个也是不难理解,回忆下(new的四个步骤)就差不多了!

但是有一个坑,虽然一般不会出现,但是有必要提一下。

在构造函数里面返回一个对象,会直接返回这个对象,而不是执行构造函数后创建的对象

3-4.apply和call调用

apply和call简单来说就是会改变传入函数的this。

let obj1={
    a:222
};
let obj2={
    a:111,
    fn:function(){
        alert(this.a);
    }
}
obj2.fn.call(obj1);

此时虽然是 obj2 调用方法,但是使用 了call,动态的把 this 指向到 obj1。相当于这个 obj2.fn 这个执行环境是 obj1 。apply 和 call 详细内容在下面提及。

3-5.箭头函数调用

首先不得不说,ES6 提供了箭头函数,增加了我们的开发效率,但是在箭头函数里面,没有 this ,箭头函数里面的 this 是继承外面的环境。

一个例子

let obj={
    a:222,
    fn:function(){  
        setTimeout(function(){console.log(this.a)})
    }
};
obj.fn();//underfind

不难发现,虽然 fn() 里面的 this 是指向 obj ,但是,传给 setTimeout 的是普通函数, this 指向是 window , window 下面没有 a ,所以这里输出 underfind 。

换成箭头函数

let obj={
    a:222,
    fn:function(){  
        setTimeout(()=>{console.log(this.a)});
    }
};
obj.fn();//222

这次输出 222 是因为,传给 setTimeout 的是箭头函数,然后箭头函数里面没有 this ,所以要向上层作用域查找,在这个例子上, setTimeout 的上层作用域是 fn。而 fn 里面的 this 指向 obj ,所以 setTimeout 里面的箭头函数的 this ,指向 obj 。所以输出 222 。

4.call和apply

call 和 apply 的作用,完全一样,唯一的区别就是在参数上面。
call 接收的参数不固定,第一个参数是函数体内 this 的指向,第二个参数以下是依次传入的参数。
apply接收两个参数,第一个参数也是函数体内 this 的指向。第二个参数是一个集合对象(数组或者类数组)

let fn=function(a,b,c){
console.log(a,b,c);
}
let arr=[1,2,3];

如上面这个例子

let obj1={
    a:222
};
let obj2={
    a:111,
    fn:function(){
        alert(this.a);
    }
}
obj2.fn.call(obj1);

call 和 apply 两个主要用途就是

1.改变 this 的指向(把 this 从 obj2 指向到 obj1 )

2.方法借用( obj1 没有 fn ,只是借用 obj2 方法)

5.闭包

闭包这个可能大家是迷糊,但是必须要征服的概念!下面用一个例子简单说下

let add=(function(){
let now=0;
return {
 doAdd:function(){
    now++;
    console.log(now);
}
}
})()

然后执行几次!

上图结果看到,now 这个变量,并没有随着函数的执行完毕而被回收,而是继续保存在内存里面。
具体原因说下:刚开始进来,因为是自动执行函数,一开始进来会自动执行,这一块

然后把这个对象赋值给 add 。由于 add 里面有函数是依赖于 now这个变量。所以 now 不会被销毁,回收。这就是闭包的用途之一(延续变量周期)。由于 now 在外面访问不到,这就是闭包的另一个用途(创建局部变量,保护局部变量不会被访问和修改)。

可能有人会有疑问,闭包会造成内存泄漏。但是大家想下,上面的例子,如果不用闭包,就要用全局变量。把变量放在闭包里面和放在全局变量里面,影响是一致的。使用闭包又可以减少全局变量,所以上面的例子闭包更好!

6.小结

在学设计模式的时候,遇到的知识点就是这一些了,这些知识点,也是我在群聊,社区里面,让人掉坑比较多的考点。这些知识,可以说是开发常用,面试常考的知识,还是建议大家深入些学习。上面那里也是简单的过一下而已。不算深入。如果大家对文章有什么建议,欢迎指点。


作者:
链接:https://www.imooc.com/article/details/id/24488
来源:慕课网
本文原创发布于慕课网 ,转载请注明出处,谢谢合作
前端面试技巧2017及自己亲身经历的的js笔试题 前端面试技巧2017及自己亲身经历的的面试题前端面试技巧2017及自己亲身经历的的面试题前端面试技巧2017及自己亲身经历的的面试题 立即下载

相关推荐

HFSS仿真的后处理结果,如何根据天线表面的电流密度分布对天线进行优化?

在HFSS仿真中,天线表面的Jsurf​是最直观、最有价值的诊断工具之一。它不仅告诉你天线“能不能工作”,还能告诉你“为什么工作”以及“哪里出了问题”。

degogmy的博客 1159

学会这些前端程序员的面试技巧,提升面试成功率

前端程序员是近年来非常热门且追求的职业,很多公司都在招聘这样的岗位。如何在众多竞争者中脱颖而出,成为一名优秀的前端程序员,成为许多求职者关心的问题。在面试过程中,合理的技巧能够帮助你表现出自己的最佳状态,以便最大限度地展现出你的能力和实力。本文将为大家分享前端程序员面试的一些技巧,以便应聘者在面试过程中的能够更好的展现自己。

maomaodaren1的博客 1294

DIY必备:如何用N-MOS管搭建低成本DC有刷电机驱动电路(附原理图+避坑指南)

本文详细介绍了如何使用N-MOS管搭建低成本、高可靠性的DC有刷电机驱动电路。针对DIY爱好者,从核心原理、电路设计、元件选型到焊接调试,提供了完整的实战指南,并重点解析了续流二极管选型、栅极驱动设计等关键避坑要点,帮助读者成功驱动电机并确保电路稳定运行。

delta的博客 775

2024前端面试宝典(初级简洁版)

2023最新面试流程问题总结,适用于初入职场的web前端宝宝们,大部分问题都是用最精简的回答帮大家整理好了,重点问题一定要弄明白原理,可以用自己的话表达出来即可。面试在于积累经验,每次面完总结不足的地方,多面多总结,你会发现新的自己哦,加油加油~~

outsider76557的博客 7077

高德地图可视化入门:零基础用Python+高德API打造你的第一个热力图

本文详细介绍了如何使用Python和高德地图API从零构建商业级热力图。通过环境配置、地理编码、数据清洗到最终可视化展示的全流程指南,帮助开发者快速掌握地图可视化技术,特别适合展示商圈人流、疫情热点等地理分布数据。

weixin_29053067的博客 306

树莓派5使用CSI摄像头 | 树莓派5接上CSI摄像头后命令行操作显示检测无设备

此系列用于记录树莓派5的一些操作,这篇文章讲述树莓派5如何使用CSI摄像头。

beyourself_he的博客 8796

前端面试总结以及面试题以及一些常用的技巧

2023前端面试题以及一些常用的开发小技巧

郝峰vip的博客 3569

YOLOv5_DeepSORT_Pytorch训练自己的多目标跟踪模型

1 准备 环境配置:https://blog.youkuaiyun.com/weixin_50008473/article/details/115250986?spm=1001.2014.3001.5501 YOLOv5_DeepSORT_Pytorch代码地址: https://github.com/mikel-brostrom/Yolov5_DeepSort_Pytorch DeepSORT论文:https://arxiv.org/pdf/1703.07402.pdf 2 训练目标检测模型 训练自己的目标检测模

weixin_50008473的博客 1万+

前端面试宝典-技巧篇

纯纯的干货,请大家认真恰饭!大家好,我是小埋,今天分享全攻略前端面试宝典,收集了全方位的资料,来与大家分享面试宝典,下面分享一张图前端面试需要会的知识。 二、面试技巧 面试一般分为技术面和 hr 面,形式上很少有群面,少部分企业可能会有一个交叉面,不过总的来说,技术面基本就是考察你的专业技术水平的, hr 面主要是看这个人的综合素质以及家庭情况符不符合公司要求,一般来讲,技术招聘,只要通过了技术面, hr 面基本上是没有问题(也有少数企业 hr 面会刷很多人)。 那我们主...

m0_54803288的博客 3730

TMF8801 ToF激光测距传感器原理图设计,已量产(距离传感器)

这张 TMF8801 小板的外围结构就很有代表性。核心传感器是 U1 TMF8801,但真正构成量产价值的是外围那一圈:U2 把 VCC 整理成 3V,R1/R2/R5 与 R3/R4/R6 两组 10K 电阻稳定默认态,Q2 2N7002 和 U3 SN74LVC2G07DCKR 处理控制链路,传感器边上还有 C1/C4/C5 三颗 100nF 紧贴去耦。

不脱发的程序猿 159

高云FPGA系列教程(7):ARM GPIO外部中断

高云GN1NSR-4C共有16个GPIO,每个GPIO可配置成输入或输出模式,支持中断输入,触发方式可选择:上升沿、下降沿、高电平、低电平触发。中断优先级可通过NVIC进行设置,支持 0-7 级可编程中断优先级。

whik1194的博客 1375

前端面试集锦

JavaScript:面试频繁出现的几个易错点 前端面试知识集锦 转载于:https://www.cnblogs.com/yaobolove/p/8760405.html

weixin_34220963的博客 61

将 AMDP Function Implementations 讲透:从 SAP CDS View 表函数到 AMDP 方法的完整实战与最佳实践

AMDP函数实现:连接ABAP与HANA的高效桥梁 本文面向ABAP开发者,详细解析AMDP函数实现技术,帮助在SAP HANA环境中充分发挥数据库算力。核心内容包括: 技术价值:解决复杂计算场景(窗口函数、跨表聚合等)中Open SQL和CDS的局限性 两种实现类型:内部复用函数与CDS表函数实现,对比其声明规则和用途差异 关键语法要点:FOR TABLE FUNCTION绑定、只读约束、参数与返回类型自动生成机制 实战应用:以采购订单聚合为例,展示AMDP在实时报表中的性能优势 完整示例:提供基于航线数

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 386

数据结构高频考点:循环队列、指针与栈的代码实现与调试

数据结构中线性结构一直是学习和面试的重点,尤其是循环队列、指针与栈三个模块,几乎覆盖了期末、考研和笔试中的核心题型。循环队列的本质是利用数组模拟环形逻辑,通过取模运算处理下标回绕,并借助牺牲一个存储单元等方式区分队空与队满;栈则强调后进先出规则,顺序栈、链栈及共享栈的实现体现了存储结构对操作效率的影响;指针作为C语言的核心机制,在链表操作、动态内存管理及二级指针传参等方面决定了代码的稳定性。理解这些概念的内在原理,掌握判空判满条件、栈顶指针约定、内存释放流程等工程实现细节,能帮助学习者在实际编码中快速定位问

a359798678的博客 416

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

程序员职业迷茫的本质与可执行破局路径

程序员职业迷茫并非能力不足或兴趣缺失,而是从‘考试驱动’向‘价值驱动’转型过程中发生的认知操作系统升级现象。其底层原理在于确定性解题思维与不确定性业务建模之间的范式断层,叠加技术学习与真实工程场景的温差效应。这种状态具有显著的职业生理学特征,如深夜持续编码、提交信息中隐含情绪化表达等,实为大脑处理高信息熵时的正常应激反应。它具备明确的技术价值:倒逼开发者构建‘能力-兴趣-价值’三角坐标系,启动最小可行性职业体验(MVCE),并建立抗干扰学习与职业韧性增强回路。典型应用场景包括应届生技术选型焦虑、实习生需求理

clugcpne10995的博客 445

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

前端面试官经验总结 | 前端面试小技巧

一、面试官总结 首先,咳咳,哈哈,嗯,严肃,我来谈一下我这个初级面试官对技术面试官的一些认知吧。我认为一个好的面试官提问应该是一针见血,问题不在于多,而在于精。我一开始面试的时候,由于没有经验,又怕对应聘者的能力评测有所疏漏,所以往往会在提问罗里吧嗦,尽量方方面面都考察到。但是,面试的多了也就找到了点感觉,实际上有时候应聘者对A问题答复的很到位,就没必要再浪费时间去问B\C\D问题了。其次,也学会了针对不同段位的FE Developer抛出不同的面试题。最经典的一个例子就是,一开始我想考察应聘者对HTTP状

BYGFJ的博客 3898

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

js易错小题整理

var a = (function f() { function f() { return 1; } return f(); function f() { return 2; } })(); console.log(a); //2 函数声明提升,同一作用域下 用 函数声明 创建的同名函数,后面的会覆盖前面的,所以输出为...

若水弹丸之地 480

前端开发面试不再害怕!10个简单步骤助你脱颖而出

整理自己的项目经验,包括参与的项目、所负责的任务和遇到的挑战。准备清晰、有条理的介绍,并能够突出自己在项目中的贡献和解决问题的能力。

青轩桃李能几何,流光欺人忽蹉跎 2186

前端面试准备

前端面试准备一、面试准备1. 利用脑图来梳理知识点2. 程序员应该具备哪些软技能?3. 准备合适的技术型简历4. 收到面试邀请之后的准备二、面试过程:1. 面试过程中要注意社交礼仪2 面试中出现的常规问题3. 如何介绍自己的项目经历4. 项目细节和技术点的追问5. 没有做过大型项目怎么办6. 当被分配一个几乎不可能完成的任务时,会怎么做7. 提问环节三、HR面试:1. 谈薪资——准确定位和自我估值2. 跟 HR 沟通的技巧四、其他1. 总结和思考2. 面试注意点 原文地址:前端面试准备 git地址:htt

爱是与世界平行 1345

分享一些前端面试的经验和技巧

【代码】分享一些前端面试的经验和技巧。

qq_18421479的博客 1083

2024前端面试经验分享

针对公司的招聘要求,准备不同的自我介绍,突出自己的重点,尽量匹配目标岗位。

qq_35436516的博客 2169

【JS错题锦集】记录一下常考易错知识点

本文原创为优快云博主:,博客首页地址:https://blog.youkuaiyun.com/qq_43523725 转载请注明出处,谢谢支持和鼓励 前阵子在刷牛客网的js选择题库,后来一个多月没刷,感觉很多知识点又忘记了,所以整理一下自己觉得重要、易错的题~本文中涉及的题均来自牛客网题库,题解参考牛客网答友或搜索到的资料。掺杂了些CSS和HTML的题,见谅,可以根据目录挑选自己想看的题。如果有解释不当的地方,还望指教 1. 关于this指针的指向 2. prototype和__proto__ 3. call与.

web18296061989的博客 657

前端面试必备技能(持续更新)

答:var会挂载到window,会存在全局变量污染,会存在变量提升,而let、const不会let、const同一作用域内不可声明同变量、var可以 (特别说明,let其实也会变量提升,但是提升之后会存在一个暂时性死区,虽然提升了但是不可以使用)const声明的是一个常量声明之后值不可以修改,如果声明的是一个对象,属性值是可以改变的答:三者的主要作用都是改变this的指向,就是在用法上有所区别,call和apply是立即执行的,主要区别是在传递参数上不同,call后面传递的参数是以逗号的形式分开的,app

hchguu的博客 987

js易错知识点总结

注:没有标注书名只有页数的参考来源均指代《Javascript权威指南第六版》,其他参考均有书名或网址标注。 一、易产生误区知识点记录 1、[] == ! [] 所有对象都转化为true(P52),数组是对象,因此空数组[]转化为布尔值为真。而空数组转化为数字时为0.因此左式Number([])=0。 “!”运算符首先将操作数转换为布尔值,然后再对布尔值求反(P81),因此右式为!Bool...

riddle1981的博客 973

2023年 前端面试题干货汇总(超详细)

声明式导航:一般写在模版中,使用router-link to属性来触发路由跳转,会解析成a标签,可以通过tag属性修改编程式导航:一般写在JS代码中,使用this.$router.push()来触发跳转将一些独立的功能封装成单独的块(文件),并组合在一起块的内部数据是私有的,只是向外部暴露一些接口来进行通讯vue组件中的data是函数是因为,vue中的组件是多个的,如果多个组件使用同一个对象,就会造成数据共用,只要其中一个组件修改了数据,必然会影响另一个组件,这是不合理的。

weixin_61578719的博客 896

js知识点学习笔记

计算机基础 编程:就是让计算机为解决某个问题而使用某种程序设计语言编写程序代码,最终得到结果的过程。 计算机语言:指人与计算机之间的通讯的语言。 计算机语言分为机器语言,汇编语言、高级语言。 汇编语言只是指令采用英文缩写和指令符,更容易识别和记忆。 高级语言:包括c语言、c++、java、c#、php、javascript等。 编程语言有很强的的逻辑和行为能力,是主动的,标记语言(html)不用于向计算机发出指令,常用于格式化链接,是用来被读取的,是被动的。 计算机硬件(输入设备

h_el_lo的博客 695
上一篇: 【转载】Java IO面试题
下一篇: 【转载】20个高级Java面试题汇总
SELECT_BIN
博客等级 码龄9年 133粉丝 178原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值