• 秋招前端面试题总结


    1、this指向问题,以前总是迷糊,现在总算是一知半解了。应当遵循以下原则,应该就能做对题目了。

    • 如果一个标准函数,也就是非箭头函数,作为某个对象的方法被调用时,那么这个this指向的就是这个对象。涉及到闭包函数时,非严格模式下,this指向window(ES module浏览器),严格模式指向undefined
    • 箭头函数的this是继承上一个函数作用域,this在函数定义的那一刻才确定的,不能通过call、apply、bind改变this指向。

    看这些文字可能会很迷糊,直接上例子吧!

    例1
    1. var arr = [4, 5, 6]
    2. let obj = {
    3. arr: [1, 2],
    4. inArr() {
    5. this.arr.push(3);
    6. },
    7. outArr: () => {
    8. this.arr.pop();
    9. },
    10. resetArr() {
    11. () => { // 注意这个箭头函数并没有执行,容易被坑
    12. console.log(this)
    13. this.arr = [7, 8, 9]
    14. }
    15. }
    16. }
    17. obj.inArr()
    18. obj.outArr()
    19. obj.resetArr()
    20. console.log(arr) // [4, 5]
    21. console.log(obj.arr) // [1, 2, 3]
    例2
    1. var name = 'window';
    2. var person1 = {
    3. name: 'person1',
    4. show1: function() {
    5. console.log(this.name)
    6. },
    7. show2: () => console.log(this.name),
    8. show3: function() {
    9. return function() {
    10. console.log(this);
    11. }
    12. },
    13. show4: function() {
    14. return () => console.log(this.name);
    15. }
    16. }
    17. var person2 = { name: 'person2' };
    18. person1.show1(); // person1
    19. person1.show1.call(person2); // person2
    20. person1.show2() // window
    21. person1.show2.call(person2); // window,箭头函数不能改变this指向
    22. person1.show3()(); // window对象 {} 闭包情况,非严格模式下this指向window
    23. person1.show3().call(person2); // person2对象 {}
    24. person1.show3.call(person2)(); // window对象 {}
    25. person1.show4()(); // person1
    26. person1.show4().call(person2); // person1
    27. person1.show4.call(person2)(); // person2
    28. // 这个例子如果没看懂,可以看看这个视频
    29. // https://www.bilibili.com/video/BV1JL411P752/?spm_id_from=333.337.search-card.all.click&vd_source=121d5b82e74c8de735f9bfb588f1044b

    2、对象字面量创建对象 与 Object.create(null) 创建对象有什么区别?     

    • 对象字面量创建对象 ,new Object()  和  { }  效果是一样
    • 通过Object.create(null)创建的对象是非常纯净的,原型链的属性和方法都不会携带。这就非常适合数组对象开发的时候,从对象中取值,提高循环效率。

         var  obj  = Object.create(null) ;  

         console.log(obj);   // 打印可以发现,obj 没有__proto__ 属性

    • 如果需要使用到对象的继承属性和方法,那就使用 obj = {}  或 obj = new Object() 这种方式。

    3、哈夫曼树带权路径长度(WPL)计算,做笔试的时候经常碰到。参考这篇文章,很快就能学会。

    哈夫曼树带权路径长度(WPL)计算 - 掘金

  • 相关阅读:
    Linux日志管理
    【Redis实战】生产中使用Redis的一些注意事项
    SQLSERVER基础--数据库基础
    项目部署与拉取Github/Gitlab/Gitee的合理步骤以及会遇到的问题
    为dev c++配置图形开发环境easyx之mingw32
    最新AI写作创作系统源码ChatGPT源码,支持AI绘画/支持OpenAI-GPT全模型+国内AI全模型
    使用Spring Boot向邮箱发送邮件
    03.前后端分离中台框架 zhontai 项目代码生成器的使用
    【算法】【递归与动态规划模块】两个字符串的最长公共子数组
    基于粒子滤波和帧差法的目标跟踪matlab仿真
  • 原文地址:https://blog.csdn.net/swust512017/article/details/132895314