Skip to content

2018 年 8 月 31 日面试题

以下代码运行结果符合预期?(还是没看懂这道题目!)

  • 目前测试的结果是,入参大于 100 + 300 的时候,time span 的打印时间会在 0.0x 毫秒以下,否则 100ms 左右
js
/*demo1*/
function f1() {
  console.time('time span');
}
function f2() {
  console.timeEnd('time span');
}
setTimeout(f1, 100);
setTimeout(f2, 200);
function waitForMs1(n) {
  var now = Date.now();
  while (Date.now() - now < n) {}
}

waitForMs1(500);
/*demo2*/
function f3() {
  console.time('time span');
}
function f4() {
  console.timeEnd('time span');
}
setTimeout(f3, 1000);
setTimeout(f4, 2000);
function waitForMs2(n) {
  var now = Date.now();
  while (Date.now() - now < n) {}
}
waitForMs2(500);

TIP

当时选的打印是约 500.077ms!回来一跑代码还是没看懂。 可以理解为??

以下哪个结果为真?

  • A. null instanceof Object
  • B. null == undefined
  • C. NaN ==NaN
  • D. false == undefined
  1. instanceof 用法

    • 用于测试其原型链上是否存在一个构造函数的 prototype 属性。
    • 检测 constructor.prototype 是否存在参数 object 的原型链
    • 语法 object instanceof constructor
    • 最好分辨的是,使用关键字 new 出来
    js
    console.info({} instanceof Object); /*true*/
    console.info(3 instanceof Number); /*false*/

关于 dom 事件流的表述哪些不正确?

  • A. 事件流包含两个阶段:事件捕获阶段,事件冒泡阶段
  • B. IE 跟标准浏览器对于 DOM 事件流实现不一样
  • C. 假设 parentEle 是 childEle 的父节点,绑定事件:parentEl.addEventListener('click',fn1.false), 和 childEle.addEventListener('click',fn2,false),当点击 childEle 的时候,fn1 先于 fn2 触发
  • D. addEventListener 第三个参数 true 代表支持捕获,false 代表不支持捕获

关于原型的说法不正确的是?

js
function a1(name, age) {
  this.name = name;
  this.age = age;
}
a1.prototype = {
  name: 'children',
  hasOwnerProperty: function () {
    return false;
  },
};
  • A.js 对象用两个不同的属性,一种是自身属性,另外一种是原型链上的继承的属性
  • B.instance.name == 'xx' 为 true 问题应该是这个,因为this指向,导致undefined,除非构造函数的时候入参
js
var a = new a1('children')就可以
  • C.instance.hasOwnProperty('age')结果是 false
  • D.所有对象都继承来自 Object.prototype

写程序

参考 http://www.cnblogs.com/TomXu/archive/2012/03/02/2355128.html 基本相同的题目来源 https://www.cnblogs.com/LoveOrHate/p/4457010.html

  1. 对象 A 直接调用对象 B 的某个方法,实现交互逻辑。但导致的问题是 A 和 B 紧密耦合,修改 B 可能造成 A 调用 B 的方法失效。
  2. 为了解决耦合问题,设计为: 对象 A 生成消息->将消息通知给一个消息处理器 (Observable)->消息处理器将消息传递给 B 具体的调用过程变成:
js
A.emit('message', data);
B.on('message', function (data) {});

请实现,消息代理功能。补充完成:

js
function EventEmitter() {}

js 写一个 ajax get 请求

emm,无数次都会被问到的面试题。

js
const xhr = new XMLHttpRequest();
xhr.open('GET', 'http://baidu.com', false);
xhr.send('hello');
console.log(xhr.responseText);

Powered by veaba