2020/08/20 -腾讯Web前端开发面试题回答

2020/08/20 - 面试题回答

面试岗位: QQ音乐 - Web前端开发

笔试题

1 - eval是做什么的?

参考回答:https://zhuanlan.zhihu.com/p/23768637

思路:先回答它是干什么的、有什么用,再回答他对作用域的影响,然后讨论执行效率的问题,最后讨论eval的其他作用。

eval的作用:

把字符串参数解析成JS代码并运行,并返回执行的结果,如

eval("2+3"); //执行加运算,并返回运算值
eval("var age=10"); //声明一个age变量
eval的作用域:

作用域在它所有的作用域范围内有效

functiona(){
   
eval("var x=1"); //等效于 var x=1;
console.log(x); //输出1
}
a();
console.log(x);//错误 x没有定义,说明是上面的声明是函数作用域内

在IE8及IE8以下的版本就不支持了, 用window.execScript()

eval性能:

应该避免使用eval,不安全,非常耗性能(2次,一次解析成js语句,一次执行)

其他作用:

由JSON字符串转换为JSON对象的时候可以用eval

var json = "{name:'Mr.CAO',age:30}";
var jsonObj = eval("(" + json + ")");
console.log(jsonObj);

2 - 如何判断一个对象是否属于某个类?

typeof

typeof使用简单,但是只适用于判断基础类型数据

instanceof

MDN文档

检测构造函数的 prototype 属性是否出现在某个实例对象的原型链上。

在页面有多个iframe的情况下, instanceof失效

constructor

引用了初始化该对象的构造函数,常用于判断未知对象的类型。

除了nullundefined,但是constructor容易被修改,也不能跨iframe使用

Object.prototype.toString.call

返回一个表示该对象的字符串,能判断所有类型,因此可将其封装成一个全能的DataType()判断所有数据类型

3 - 同步和异步的区别?

参考: JS基础——同步异步的区别

https://zhuanlan.zhihu.com/p/66593213

同步:代码由JS主线程按顺序通过调用栈执行。

  • 优点:简单、执行结果确定。
  • 缺点:遇到耗时或阻塞代码会让主线程卡住,影响执行效率。

异步:JavaScript异步实现方式是单线程非阻塞式,JS引擎有执行代码的主线程以及其他线程(如计时、AJAX操作),当主线程调用异步代码后会将异步操作放到一个队列中,当异步操作执行完成后其所在线程会通知主线程来执行队列中对应的回调函数,而主线程必须在所有同步代码执行完成后,才能去执行回调。

如果此时同步代码出现死循环,那么后续的同步代码与异步回调都无法执行。

  • 优点:能够执行耗时任务而不影响主线程的执行,大幅提升效率。
  • 缺点:写法复杂,状态不确定,回调调用时间不确定。

4 - 外链JS异步加载(不阻塞)的方式有哪些,分别有什么区别和应用方案?

参考: 浅谈JavaScript异步加载的三种方式

  1. script标签的位置: body末尾
  2. async和defer:
    1. async 并行下载,立即执行;html 5.0定义
    2. defer并行下载,延迟到DOM构建完执行;html 4.0定义
  3. 动态创建script(在window.onload之后)

5 - 如何判断当前脚本是运行在浏览器还是Node环境?

typeof window
  • 4
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值