🙄2018魅族前端校招笔试

  • [x] 去重
1
2
3
4
5
6
7
8
9
10
11
function foo(arr) {
var res = [];
for (var i = 0; i < arr.length; i++) {
if (res.indexOf(arr[i]) === -1) {
res.push(arr[i]);
}
}
return res;
}
foo([1,1,1,2,3,4,4,2,5,2,45])
// [1, 2, 3, 4, 5, 45]
  • [x] Promise原理,api,用途

详见笔记: 关于Promise的使用

  • [x] console输出
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
function Foo() {
funName = function() {
console.log('fun1');
};
return this;
};
Foo.funName = function() {
console.log('fun2');
};
Foo.prototype.funName = function() {
console.log('fun3');
};
var funName = function() {
console.log('fun4');
};
function funName() {
console.log('fun5');
};
Foo.funName(); // fun2 Foo.funName已经修改为fun2
funName(); // fun4 函数声明会提前,函数表达式覆盖funName函数
Foo(); // window 返回window对象,同时没有var声明,funName相当于在window全局定义,覆盖了全局的funName
funName(); // fun1 所以这里输出的是fun1
new Foo().funName(); // fun3 // new创建对象 使用的是原型中的函数
// 输出fun3 同上,返回【new Foo().funName】类型的实例;相当于 new ((new Foo()).funName)();
// 优先级问题,new必须对应一个();就是new出某种对象的实例,这种实例就是介于new和()之间
new new Foo().funName();

引申出——关于new对象的使用:
1
2
3
4
5
6
7
8
9
function Person(name) {
this.name = name;
this.sayName = function() {
console.log(this.name);
}
}
var obj = new Person('tom');
  1. 创建新的对象;
1
var obj = {};
  1. 将构造函数的作用域赋给新对象(this指向新对象);将Person的this指向obj;
1
2
3
4
5
6
var obj = {
name: 'tom',
sayName: function() {
console.log(this.name);
}
}
  1. 执行构造函数中的代码;
  2. [x] 返回新对象;return obj;
  • [x] 上下固定,中间自适应布局
    使用浮动

  • [x] event loop

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
var fs = require('fs');
fs.readFile('./untitled.html' ,(err, doc) => {
console.log('event loop');
});
setTimeout(() => {
console.log('time');
}, 0);
Promise.resolve().then(() => {
console.log('promise');
});
console.log('start');

输出:☝🏻头图

  • Promise和setTimeout不在同一个事件队列,
  • Promise的任务会在当前事件循环末尾中执行,
  • 而setTimeout中的任务是在下一次事件循环执行

  • [x] 其他不记得了

坚持原创技术分享,您的支持将鼓励我继续创作!