我知道有很多人不同意这种类型的面试。其实不管你喜不喜欢,你都得接受。尤其当你是自学的,而且要申请第一份工作时。

我估计很多有人其它方法来证明他自己,像Github/ 项目地址可能是非常理想的证明方法,但也别全都指望这些。
好消息是有一些很难的问题,在有限的时间里我没答上来(比如说Event Loop和杨辉三角),一些其它面试侯选人也承认他们也没答上来,这会让讨论变得轻松很多。
坏消息是有些面试之后就没有任何反馈了。有三家公司再也没联系过。这点击打击自信,而且没有受到尊重。然后你可能会有心理斗争,“面试的不够好?”,“他们不喜欢我这种类型?”。所以如果你是面试官,请给你的面试者一个明确的答复,即使是自动回复也比什么都没有的强。
1. 设计一个函数返回第n行的杨辉三角。(整个面试只有这一个问题)
注* 杨辉三角也叫Pascal’s Triangle
1
1     1
1     2     1
1     3     3      1
...
2. 设计一个函数,返回一串字符串中重复次最多的单词。
3. 使用递归打印长度为n的费波那契数列。
注* 费波那契数列由0和1开始,之后就由之前的两数相加 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233
4. 解释一下 bind, apply和call的用法和区别。
5. 解释一下什么是event delegation(事件代理)和它为什么有用。
6. 什么是event loop (事件循环)?
7. hoisting(声明提升)在JavaScript里是怎么工作的?
8. 描述一下你在设计应用或网站时的流程。
9. 你最希望JavaScript或浏览器中添加哪些功能,为什么?
10. 函数式编程和命令式编程之间的区别?你喜欢哪一个?

5个经典的前端面试问题

问题1:Scope作用范围

考虑下面的代码:

(function() {   var a = b = 5;})();

console.log(b);

什么会被打印在控制台上?

回答 

上面的代码会打印 5。

这个问题的诀窍是,这里有两个变量声明,但 a 使用关键字var声明的。代表它是一个函数的局部变量。与此相反,b 变成了全局变量。

这个问题的另一个诀窍是,它没有使用严格模式 ('use strict';) 。如果启用了严格模式,代码就会引发ReferenceError的错误:B没有定义(b is not defined)。请记住,严格模式,则需要明确指定,才能实现全局变量声明。比如,你应该写:

(function() {   'use strict';   var a = window.b = 5;})();

console.log(b);

问题2:创建“原生”(native)方法

给字符串对象定义一个repeatify功能。当传入一个整数n时,它会返回重复n次字符串的结果。例如:

console.log('hello'.repeatify(3));

应打印 hellohellohello。

回答 

一个可能的实现如下所示:

String.prototype.repeatify = String.prototype.repeatify || function(times) {   var str = '';   for (var i = 0; i < times; i++) {      str += this;   }   return str;};

现在的问题测试开发者有关JavaScript继承和prototype的知识点。这也验证了开发者是否知道该如何扩展内置对象(尽管这不应该做的)。

这里的另一个要点是,你要知道如何不覆盖可能已经定义的功能。通过测试一下该功能定义之前并不存在:

String.prototype.repeatify = String.prototype.repeatify || function(times) {/* code here */};

当你被要求做好JavaScript函数兼容时这种技术特别有用。

问题3:声明提升(Hoisting)

执行这段代码,输出什么结果。

function test() {   console.log(a);   console.log(foo());   var a = 1;   function foo() {      return 2;   }}

test();

回答 

这段代码的结果是 undefined 和 2。

原因是,变量和函数的声明都被提前了(移到了函数的顶部),但变量不分配任何值。因此,在打印变量的时候,它在函数中存在(它被声明了),但它仍然是 undefined 。表示换句话说,上面的代码等同于以下内容:

function test() {   var a;   function foo() {      return 2;   }

   console.log(a);   console.log(foo());

   a = 1;}

test();

问题4:this在JavaScript中如何工作的

下面的代码会输出什么结果?给出你的答案。

var fullname = 'John Doe';var obj = {   fullname: 'Colin Ihrig',   prop: {      fullname: 'Aurelio De Rosa',      getFullname: function() {         return this.fullname;      }   }};

console.log(obj.prop.getFullname());

var test = obj.prop.getFullname;

console.log(test());

回答 

答案是Aurelio De Rosa和John Doe。原因是,在一个函数中,this的行为,取决于JavaScript函数的调用方式和定义方式,而不仅仅是看它如何被定义的。

在第一个 console.log()调用中,getFullname() 被调用作为obj.prop对象的函数。所以,上下文指的是后者,函数返回该对象的fullname。与此相反,当getFullname()被分配到test变量时,上下文指的是全局对象(window)。这是因为test是被隐式设置为全局对象的属性。出于这个原因,该函数返回window的fullname,即定义在第一行的那个值。

问题5:call() 和 apply()

现在让你解决前一个问题,使最后的console.log() 打印 Aurelio De Rosa。

回答 

该问题可以通过强制使用 call() 或者 apply() 改变函数上下文。在下面我将使用call(),但在这种情况下,apply()会输出相同的结果:

console.log(test.call(obj.prop));

转载于:https://www.cnblogs.com/libin-1/p/5940896.html

问得最多的十个JavaScript前端面试问题相关推荐

  1. JavaScript前端面试常考算法模板

    一.二分查找 使用条件 排序数组 (30-40%是二分) 当面试官要求你找一个比 O(n) 更小的时间复杂度算法的时候(99%) 找到数组中的一个分割位置,使得左半部分满足某个条件,右半部分不满足(1 ...

  2. 前端面试官常问javaScript编程题,隔壁王大爷看了都会了

    目录 1.数组排序. 2.数组元素的去重: 3.用递归的方法求数组的求和: 4.防抖节流的思路. 5.深拷贝.浅拷贝: 6.做一个10秒的倒计时: 7.setTimeout()和setInterval ...

  3. 前端vue适配不同的分辨率_前端面试时,被问到项目中的难点有哪些?

    在每个前端求职者的面试过程中,一定都有过被面试官问到项目中的难点,而答不上来的情况.为了让大家在前端面试前准备得更加充足,小编准备了一些易被忽视且难度较高的前端面试题,希望可以帮助大家更加顺利完成求职 ...

  4. 前端面试+学习笔记(HTML+CSS+JavaScript+ES6+Vue+NodeJs)

    前端面试+学习笔记(HTML+CSS+JavaScript+ES6+Vue+NodeJs) 一. HTML 1. 盒子模型 是什么:每个元素被表示为一个矩形的盒子,有四个部分组成:内容(content ...

  5. 那些巨头公司的前端面试都喜欢问些什么?

    在过去的几年里,我在亚马逊和雅虎面试过很多专注于前端开发的Web开发者和软件工程师,在这篇文章中,我想分享一些面试技巧,帮助候选人为面试做好准备. 免责声明--本文并非旨在列出在前端面试中可能会被问到 ...

  6. 前端面试被问到性能优化该肿么办!

    性能优化1 前端面试被问到性能优化该肿么办! 1.1 页面重构怎么操作? 网站重构:在不改变外部行为的前提下,简化结构.添加可读性,而在网站前端保持一致的行为. 也就是说是在不改变UI的情况下,对网站 ...

  7. 世界顶级公司的前端面试都问些什么

    在过去的几年里,我在亚马逊和雅虎面试过许多前端工程师.在这篇文章中,我想分享一些技巧,帮助大家做好准备. 免责声明: 本文的目的并不是为你列出在前端面试中可能会被问到的问题,但是可以将其视为知识储备. ...

  8. 2022前端面试必问的几个小问题,你学费了吗?

    写在前面 CSDN话题挑战赛第1期 活动详情地址:https://marketing.csdn.net/p/bb5081d88a77db8d6ef45bb7b6ef3d7f 参赛话题:前端面试宝典 话 ...

  9. 前端面试官问闭包,怎样回答脱颖而出

    闭包这个话题一直都是前端面试的重点,下面我将结合自己的春招面试经验,关于闭包这个问题讲讲技术面试官会对它进行怎么一个提问? 1.闭包是什么? 闭包是js的一种语法特性. 闭包就是能够读取其他函数内部变 ...

最新文章

  1. Python设计模式-单例模式
  2. 《Effective Java》 读书笔记(持续更新)
  3. 一个可供中小团队参考的微服务架构技术栈
  4. android怎样添加图片锐化功能,如何在android处理图片(图像二值化锐化转换格式).doc...
  5. Android 获取触摸点坐标,判断滑动方向,滑动距离,滑动速度
  6. aix查看lv_Aix 添加VG,LV并挂载使用
  7. ThreadLocal和线程同步机制的对比
  8. c++ 排列组合_省考行测数量关系的老大难,排列组合的基本类型题及秒杀技巧...
  9. 网页设计太麻烦?15款免费优质Bootstrap UI工具包助你效率倍增!
  10. Ubuntu12.04上编译PlateGatewayQt
  11. 手机团购,团购市场的下一引爆点
  12. 智能优化算法应用:基于麻雀搜索算法的积分计算 -附代码
  13. python socket清空接受区_用 Python 开发一个 「聊天室」
  14. centos下修改mysql root密码
  15. 任学堂说科技:穿越计算机迷雾,从零开始构建计算机
  16. MES管理系统基础知识
  17. [手机Linux]一,线刷小米6到开发版,获取root权限
  18. 性能测试结果分析结果
  19. 防止ACCESS数据库被下载的一个通用解决方法:
  20. 《Python程序设计》实验四 Python综合实践实验报告

热门文章

  1. java 集成grizzly_java – 在Grizzly上使用JaaS和Jersey
  2. create react app 在start后不清空terminal
  3. 网络营销中一旦网站改版需要遵循哪些网络营销原则呢?
  4. 网络推广外包——竞价账户网络推广外包时怎样进行关键词推广?
  5. 404页面设计技巧性分享不容错过!
  6. 网站排名好却没流量到底是什么环节出了问题?
  7. 网站建设中的五大常见问题
  8. irobot擦地机器人故障_iRobot擦地机器人:只会擦地并不“奢侈”
  9. dubbo k8s 服务发现_服务化改造实践(二)| Dubbo + Kubernetes-阿里云开发者社区
  10. Android换肤逻辑