1.问:什么是匿名函数?作用是什么?
          答:没有名字的函数就是匿名函数,作用有三,把函数当作变量赋值,把函数当作参数(回调函数),把函数当作另一个函数的返回值(闭包)
        2.什么是回调函数?为什么需要回调函数?
          答:一个被当作函数参数的函数,在不打开第三方函数的情况下实现完整功能,就需要回调函数
        3.什么是立即执行函数?为什么需要立即执行函数?
          答:此概念只针对匿名函数,即函数在定义阶段就可以直接运行,当我们希望一个函数只执行一次,执行完之后立马销毁,就需要立即执行函数了
        4.立即执行函数的写法
          (function (){}())
          (function (){})()
        5.什么是作用域链?
          答:父子函数嵌套时,不同变量在不同作用域的使用权限就是作用域链,子函数可以访问父函数的所有变量,父函数无法访问子函数的变量
        6.什么是闭包?为什么需要闭包?
          答:函数嵌套函数就是闭包,被嵌套的函数叫闭包函数,全局变量会破坏函数的独立性,既要实现功能又不能破坏函数独立性,就需要闭包
        7.简述闭包的写法
          父函数嵌套子函数,在父函数内部声明局部变量,子函数操作该局部变量并return,将子函数作为父函数的返回值,在全局声明变量接收该返回值,就形成了闭包
        8.闭包的作用是什么?
          函数外部可以返回函数内部的变量,实现属性私有化和模块化开发
        9.闭包的缺陷是什么?
          闭包会延长局部变量的生命周期,打破垃圾回收机制,大量使用闭包会导致内存泄漏
        10.什么是柯里化函数?柯里化的核心思想是什么?
          答:一个函数,只有一个参数,并且返回值是一个函数的函数。对函数参数的自由处理,让函数更加灵活,降低了通用性,提升了特定性
        11.什么是this?作用是什么?分几种情况?
          答:this是函数对象的内置对象,其作用域在函数内部。
            this出现在事件体内,指向触发该事件的元素本身
            this出现在普通函数内(除了事件体和构造函数),代表调用该方法的元素本身
            this出现在构造函数内,指向new出来的空间
            this出现在箭头函数内,指向其父级的前缀
        12.什么是类?什么是对象?
          答:类是将具有相同属性和行为的对象归纳为一个类型,是一个模板,抽象不存在的;对象是类的实例化,携带了类的属性和方法,真实存在且唯一
        13.什么是原型对象?作用是啥?
          答:原型对象prototype是对象的一个属性,可以理解成一个存储空间,类的对象将具有相同内容的属性和方法存储到这个空间里,供其实例化对象访问和使用,大大减少代码量,降低内存消耗
        14.什么是arguments?作用是什么?
          答:实参列表,是函数对象的内置对象,作用域在函数内部,arguments的返回值是一个伪数组,只能访问元素和长度,其他API无法使用。作用有二,可以设置不定参函数,arguments.callee代表函数本身,常用于递归函数
        15.为什么子类的实例对象可以访问到子类的所有属性和方法,以及父类的所有属性和方法?
          答:所有实例对象在创建的过程中自带__proto__属性,指向类的原型对象prototype,所以可以访问类的原型上的属性和方法,类在构造对象的时候new出了空间,类的实例对象可以直接访问自己new出空间的属性和方法。
             子类的原型对象指向父类的实例对象,子类的实例对象可以访问父类构造对象时new出的属性和方法,子类的实例对象通过父类实例对象的__proto__可以访问父类原型上的的属性和方法
        16.apply/call/bind的区别是什么?
          答:三者都是函数对象的内置方法,用来修改this指向。apply和call用来修饰有名函数,bind用来修饰匿名函数。apply的第二个参数必须是数组,call和bind的参数用逗号隔开。apply和call都是直接调用方法,bind会产生新的函数对象
        17.面向对象的编程思想包括哪些?
          答:封装、继承、多态
        18.什么是封装的思想?
          答:将若干个属性和方法封装成一个整体变成一个对象,通过对象调用这些属性和方法
        19.什么是继承?
          答:子类吸收父类已有的属性和方法,提升了代码的复用性(ES6类的方法直接绑定在原型对象上)
        18.什么是多态?
          答:在面向对象的过程中,有一种极致的复用性叫多态,降低了类和函数的耦合性,实现了类和函数的解耦
        20.ES5继承都有哪些模式?
          答:三种模式,原型继承、借用构造方法继承(apply和call)、混合继承
        21.混合继承是怎么实现的?
          答:混合继承是原型继承和借用构造方法继承合二为一的继承模式,在混合继承中,原型继承是子类继承父类prototype上的属性和方法,借用构造方法继承是子类继承父类new出空间的属性和方法
        22.什么是原型继承?
          答:通过原型对象实现继承
        23.原型继承的缺陷有哪些?
          答:子类对象构造时,无法初始化父类派生给子类的属性,一旦实现继承关系,继承指向就不能修改,必须先实现继承关系才能为子类添加原型属性和方法
        24.借用构造方法继承的作用和缺陷是什么?
          答:可以实现子类对象构造时,初始化父类派生给子类的属性,缺陷是无法继承父类原型对象上的属性和方法
        25.instanceof是什么?和typeof的异同点是什么?
          答:instanceof是判断引用类型的关键字,返回值是布尔值,如果A对象是B类型的,返回true,反之返回false。二者都是判断数据类型的关键字,typeof只能判断基本类型,无法判断引用类型,若判断引用类型返回Object,instanceof能够判断引用类型,且满足兼容性规则(高版本兼容低版本,低版本不兼容高版本)
        26.内置基本类型和内置引用类型在存储上的区别是什么?
          答:内置基本类型只有一块栈空间,里面存储的是数值,内置引用类型有栈和堆,栈里面存的是堆空间的地址,堆空间里存的是真实的内容
        27.什么是值传递?什么是引用传递?
         答:值传递是将栈里面的数值当作实参传递,单向传递,形参无法改变实参,需要返回值。引用传递是将栈空间里面的地址当作实参传递,形参和实参指向同一地址,形参能够改变实参堆空间的内容,双向传递,无需返回值
        28.简述深浅拷贝
         答:深浅拷贝是针对引用类型的概念,深浅拷贝本质区别是有没有开辟空间,浅拷贝只拷贝地址,不开辟空间,一改全改,深拷贝是既拷贝地址也开辟空间,各改各的
        29.什么是单例类?怎么实现?有什么作用?
          答:一个类只能创建一个对象,就是单例类。当这个类没有对象的时候,就创建一个对象,如果这个类已经有了一个对象,则无法继续创建对象,保持该类的对象永远有且只有一个。可以方便在整个项目之间传递共享数据
        30.简述观察者模式
          答:当发布者发布消息时,所有观察者都可以接收到该消息。代码角度:观察者定义函数,发布者调用函数,传递参数
        31.什么是cookie?
          答:cookie是会话跟踪技术,也是页面之间传递数据的变量。cookie分为会话级cookie和长生命周期的cookie,长生命周期的cookie由服务器生成,由服务器发送到本地磁盘,保存在本地磁盘中,会话级cookie由浏览器生成,保存在浏览器当中,浏览器关闭cookie自动清除。二者的读取是一样的,会话级cookie没有删除的概念,当所有页面关闭后会自动清除,长生命周期的cookie没有直接删除的方法,可以把存储的时间更改为-1或者等存储时间到了自动删除,长生命周期的cookie写的时候需要加expires=标准日期对象
        32.cookie和本地存储的区别有什么?
          答:cookie存储数据的大小是4K,本地存储的数据大小是4-5MB;cookie每次都会把数据发送在HTTP请求当中,浪费性能,本地存储不参与服务器通信;cookie的原生API极少,需要程序员自己封装,本地存储的API等同于cookie封装好的API;会话级cookie等同于sessionStorage,localStorage除非手动删除,否则将一直存储在本地。
        33.什么是Object.defineProperty?
          答:Object.defineProperty是ES5的一个与数据驱动息息相关的函数,能改变Vue修改变量的方式,以前是DOM驱动,现在是数据驱动,可以精准控制每个属性的特点
        34.Object.defineProperty的方法有哪些?
          答:get和set,value,writable(是否可以设置),enumerable(是否可以被枚举),configurable(是否可以被删除)
        35.什么是双向绑定原理?
          答:改数据,DOM元素发生改变;改DOM元素,数据发生改变,用的就是Object.defineProperty()中的get和set方法

【精选】前端JS面试题35个的更多相关文章

  1. 一道常被人轻视的前端JS面试题

    前言 年前刚刚离职了,分享下我曾经出过的一道面试题,此题是我出的一套前端面试题中的最后一题,用来考核面试者的JavaScript的综合能力,很可惜到目前为止的将近两年中,几乎没有人能够完全答对,并非多 ...

  2. 一道常被人轻视的前端JS面试题(转)

    分享下我曾经出过的一道面试题,此题是我出的一套前端面试题中的最后一题,用来考核面试者的JavaScript的综合能力,很可惜到目前为止的将近两年中,几乎没有人能够完全答对,并非多难只是因为大多面试者过 ...

  3. [译]前端JS面试题汇总 Part 1(事件委托/this关键字/原型链/AMD与CommonJS/自执行函数)

    原文:https://github.com/yangshun/front-end-interview-handbook/blob/master/questions/javascript-questio ...

  4. 前端JS面试题汇总 Part 2 (null与undefined/闭包/foreach与map/匿名函数/代码组织)

    原文:https://github.com/yangshun/front-end-interview-handbook/blob/master/questions/javascript-questio ...

  5. 前端JS面试题

    题目如下: function Foo() { getName = function () { alert (1); }; return this; } Foo.getName = function ( ...

  6. 前端JS面试题汇总 Part 3 (宿主对象与原生对象/函数调用方式/call与apply/bind/document.write)

    原文:https://github.com/yangshun/front-end-interview-handbook/blob/master/questions/javascript-questio ...

  7. 2016 JS 笔试题汇总:

    1 1 1 CS&S(中软国际): 1 JavaScript 循环表达式: 2  JavaScript表达式boolean返回值: 3 网页中的事件/HTML 事件属性/JavaScript ...

  8. 【编码题篇】收集整理来自网络上的一些常见的 经典前端、H5面试题 Web前端开发面试题

    编写一个方法 求一个字符串的字节长度假设:一个英文字符占用一个字节,一个中文字符占用两个字节 function GetBytes(str){ var len = str.length; var byt ...

  9. 前端基础面试题(JS部分)

    1.几种基本数据类型?复杂数据类型?值类型和引用数据类型?堆栈数据结构? 基本数据类型:Undefined.Null.Boolean.Number.String 值类型:数值.布尔值.null.und ...

  10. 前端基础面试题(js部分)

      前端基础面试题(JS部分)   1.几种基本数据类型?复杂数据类型?值类型和引用数据类型?堆栈数据结构? 基本数据类型:Undefined.Null.Boolean.Number.String值类 ...

随机推荐

  1. 在Ubuntu 主机上使用 Cockpit 管理容器

    如果你管理着一台 Linux 服务器,那么你可能正在寻找一个可靠的管理工具.为了这个你可能已经看了 Webmin 和 cPanel 这类软件.但是,如果你正在寻找一种简单的方法来管理还包括了 Dock ...

  2. 改善C#程序的方法-2 使用TryParse

    一 使用TryParse,而不是Parse 除string外的所有基元类型,都有两个将string类型转型为其本身类型的方法:Parse 和 TryParse. 以double类型为例,这两个方法最简 ...

  3. vite vue3 规范化与Git Hooks

    在 <JS 模块化>系列开篇中,曾提到前端技术的发展不断融入很多后端思想,形成前端的"四个现代化":工程化.模块化.规范化.流程化.在该系列文章中已详细介绍了模块化的发 ...

  4. sql面试50题------(21-30)

    文章目录 21.查询不同老师所教不同课程平均分从高到低显示 23.使用分段[100,85),[85,70),[70,60),[<60] 来统计各科成绩,分别统计各分数段人数:课程ID和课程名称 ...

  5. 如何在IDEA中自定义模板、快速生成完整的代码?

    文章目录 1.修改现有的模板 2.自定义模板 3.在代码中测试自定义模板 1.修改现有的模板 打开设置面板- settings 2.自定义模板 选择定义模板组 选择创建模板 define 代表应用的范 ...

  6. 简读《ASP.NET Core技术内幕与项目实战》之3:配置

    特别说明:1.本系列内容主要基于杨中科老师的书籍<ASP.NET Core技术内幕与项目实战>及配套的B站视频视频教程,同时会增加极少部分的小知识点2.本系列教程主要目的是提炼知识点,追求 ...

  7. win10桌面右键卡顿卡死解决方法

    win+R,打开命令行 输入services.msc 找到NADIA Display Container LS,将其由自动改为禁用,解决问题. PS:网上有些改注册表的方法,确实可以治标,但是大家都应 ...

  8. 基于GA遗传算法的TSP旅行商问题求解

    import random import math import matplotlib.pyplot as plt import city class no: #该类表示每个点的坐标 def __in ...

  9. antd 批量上传文件逻辑

    基本步骤 通过 antd 框架的 Upload 控件,采用手动上传的方式,先选择需要上传的文件(控制文件数量以及大小),再根据所选的文件列表,循环上传,期间通过 Spin 控件提示上传中. 效果展示 ...

  10. SpringCloud(二) - Eureka注册中心,feign远程调用,hystrix降级和熔断

    1.项目模块介绍 2. 父项目 主要依赖 spring-cloud 的 版本控制 <properties> <!-- springCloud 版本 --> <scd.ve ...