[关闭]
@hucheng91 2017-01-03T16:12:07.000000Z 字数 2333 阅读 692

关于前端工程师-开放性笔试 答案


元旦3天赶了2场婚礼,一直都在火车上,所以到现在才有时间看面试题,9点下班回家开始做这个面试题,3个javascript题比较有意思,主要解决3个javascript问题,第一个css,html问题,没啥太大难度,如果觉得3个javascript问题面试官觉得解答的可以,需要的话,我再抽时间写下

  1. 这个问题主要考闭包的影响
  2. 你的代码:
  3. for (var i = 1; i <= 10; i++) {
  4. setTimeout(() => console.log(i));
  5. }
  6. 解决方法:
  7. for (var i = 1; i <= 10; i++) {
  8. setTimeout((function(b){console.log(b)})(i));
  9. }

这种循环调用实际应用,经常出现在循环给元素绑定事件,最后事件只绑定到最后的那个元素上面

  1. class Animal {
  2. constructor(pos) {
  3. debugger;
  4. this.pos = pos;
  5. }
  6. }
  7. class Whale extends Animal {
  8. constructor(pos) {
  9. debugger;
  10. super(pos + 1);
  11. }
  12. swim() {
  13. this.pos <<= 1;
  14. setTimeout(function timer() {
  15. this.pos <<= 1;
  16. this.pos < 8 && setTimeout(timer, 0);
  17. console.log(this.pos); //4 ,8
  18. }, 0);
  19. console.log(this.pos); //2
  20. }
  21. }
  22. var pos = 1;
  23. const whale = new Whale(pos);
  24. whale.swim();
  25. 打印输出,分别得到 248
  26. 感觉这个是在考察javascript的面向对象思想,还有this关键字作用域的理解;
  27. Whale对象初始化的时候,在构造函数中调用父类的构造函数,虽然setTimeout没有设置间隔时间,但浏览器本身是有一个默认间隔时间的,因此先执行打印,所以第一次打印2,在第二次执行时,移位运算当然先打印的值4,接着回调timer函数,这个时候this还是指向whale对象,因此打印8
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注