@hucheng91
2017-01-03T16:12:07.000000Z
字数 2333
阅读 692
javascript
function async_add (m, n, callback) {
setTimeout(callback.bind(null, m+n), 500);
}
这个问题我觉得面试官主要考察的是,关于递归的调用
下面是我的实现
Array.prototype.async_add = function(callback) {
'use strict';
if (this === null) {
throw new TypeError('Array.prototype.reduce called on null or undefined');
}
if (typeof callback !== 'function') {
throw new TypeError(callback + ' is not a function');
}
var t = Object(this), len = t.length >>> 0, k = 0, value;
if (arguments.length == 2) {
value = arguments[1];
} else {
while (k < len && !(k in t)) {
k++;
}
if (k >= len) {
throw new TypeError('Reduce of empty array with no initial value');
}
value = t[k++];
}
for (; k < len; k++) {
if (k in t) {
value = callback(value, t[k], k, t);
}
}
return value;
};
[1,2,3,5,10,25,37,48].async_add(function(accumulator, currentValue){
console.log(accumulator + currentValue);
return accumulator + currentValue;
});
这个问题主要考闭包的影响
你的代码:
for (var i = 1; i <= 10; i++) {
setTimeout(() => console.log(i));
}
解决方法:
for (var i = 1; i <= 10; i++) {
setTimeout((function(b){console.log(b)})(i));
}
这种循环调用实际应用,经常出现在循环给元素绑定事件,最后事件只绑定到最后的那个元素上面
class Animal {
constructor(pos) {
debugger;
this.pos = pos;
}
}
class Whale extends Animal {
constructor(pos) {
debugger;
super(pos + 1);
}
swim() {
this.pos <<= 1;
setTimeout(function timer() {
this.pos <<= 1;
this.pos < 8 && setTimeout(timer, 0);
console.log(this.pos); //4 ,8
}, 0);
console.log(this.pos); //2
}
}
var pos = 1;
const whale = new Whale(pos);
whale.swim();
打印输出,分别得到 2,4,8
感觉这个是在考察javascript的面向对象思想,还有this关键字作用域的理解;
在Whale对象初始化的时候,在构造函数中调用父类的构造函数,虽然setTimeout没有设置间隔时间,但浏览器本身是有一个默认间隔时间的,因此先执行打印,所以第一次打印2,在第二次执行时,移位运算当然先打印的值4,接着回调timer函数,这个时候this还是指向whale对象,因此打印8;
你最喜欢的框架/语言?
最喜欢javascript,原因是:有个文本编辑器,加个浏览器就可以开始写代码(不过,随着js比重越来越大,越来越复杂,还是需要打包,特别是webpack流行起来,直接用浏览器只能,这种玩法越来越少),喜欢的理由有很多,函数式编程,第一见参数用函数,函数柯里化觉得很神奇,随着node.js的流行,后端也在开始被javascript占领,这个也是喜欢的,不过相对其他语言,例如java,js还是像个匕首,适合小团队,小中型项目,不适合大型企业级应用。如果在微服务架构上来说,node.js适合用来做后端的前端,意思是不处理复杂的业务逻辑,主要用来拼装json和前端交互;
如果允许你为它添加一项特性,你希望是什么?为什么?
把number的精度好好弄弄,处理极大数,0~1之间的数容易出错,加减乘除也是容易出错,多提供集中数据类型,别一个数组走天下。
你做过的最酷炫或倾注最多心血的项目是什么?向我们介绍一下?
做一个产品上架的组件,分成选择产品类别,定义产品,显示产品实施节点,节点选择模板,不同的模板在产品实施时,会出现不同界面;产品实施节点,自定义,文件流处理,最后发布环节,一起提交(http://www.e-famen.com/);还有一个模板引擎组件,模板引擎使得自己对组件的封装思想有了新的认识
你拥有怎样的性格?喜欢什么业余活动?期望加入怎样的团队?
乐观,热爱生活,充满正能量,喜欢轮滑,玩了5年,大学是轮滑社社长,参加各种晚会,轮滑带给我朋友,还有对做事情的态度;期待加入有活力,热爱技术,热爱生活,做有意义的事的团队;