JavaScript面试题

本文主要涵盖了JavaScript面试中常见的知识点,包括作用域链、原型与原型链、事件代理、继承方式、this的理解、跨域解决方案、webpack的工作原理、AMD和CommonJS的区别、Web安全及防护、设计模式、同源策略、兼容性问题、数组和对象遍历、Promise的使用、Node.js应用场景、会话跟踪方法、JavaScript数据类型、内置对象、编码规范、JSON、eval、null与undefined的区别、严格模式、JSON的理解、延迟加载方式、同步与异步的区别、ES6特性、面向对象与面向过程编程的对比、Gulp的介绍、let、var与const的区别以及Vue的双向绑定原理。
摘要由CSDN通过智能技术生成

一、说说你对作用域链的理解

作用域链是指:当js编译器在寻找变量时,先在最近的作用域(花括号)里找,如果找不到,则朝上一级作用域(花括号)里找,依次类推,直到找到或者找不到为止。这就是作用域链。

二、JaveScript 原型,原型链?有什么特点?

1)、原型:

每个函数都会有一个属性prototype。这个属性就是原型属性。JavaScript在实现面向对象时,会经常使用原型。每个对象(实例)的有一个属性( __ proto __)指向构造函数的prototype属性(prototype指向的内存区域)。prototype属性里保存着所有对象(实例)共享的属性和方法。

2)、原型链:当访问一个对象的某个属性时,会先在这个对象本身属性上查找,如果没有找到,则会去它的 __ proto __ 隐式原型上查找,即它的构造函数的prototype,如果还没有找到就会再在构造函数的prototype的 __ proto __中查找,这样一层一层向上查找就会形成一个链式结构,我们称为原型链。

三、请解释什么是事件代理

事件代理(Event Delegation),又称之为事件委托。是 JavaScript 中常用绑定事件的常用技巧。顾名思义,“事件代理”即是把原本需要绑定的事件委托给父元素,让父元素担当事件监听的职务。事件代理的原理是DOM元素的事件冒泡。

使用事件代理的好处是可以提高性能,可以大量节省内存占用,减少事件注册,比如在table上代理所有td的click事件就非常棒,可以实现当新增子对象时无需再次对其绑定

四、Javascript如何实现继承?

1.原型链

基本思想:利用原型让一个引用类型继承另外一个引用类型的属性和方法。

构造函数,原型,实例之间的关系:每个构造函数都有一个原型对象,原型对象包含一个指向构造函数的指针,而实例都包含一个指向原型对象的内部指针。

2.借用构造函数

基本思想:在子类型构造函数的内部调用超类构造函数,通过使用call()和apply()方法可以在新创建的对象上执行构造函数。

3.组合继承

基本思想:将原型链和借用构造函数的技术组合在一块,从而发挥两者之长的一种继承模式。

4.原型式继承

基本想法:借助原型可以基于已有的对象创建新对象,同时还不必须因此创建自定义的类型。

5.寄生式继承

基本思想:创建一个仅用于封装继承过程的函数,该函数在内部以某种方式来增强对象,最后再像真正是它做了所有工作一样返回对象。

6.寄生组合式继承

基本思想:通过借用函数来继承属性,通过原型链的混成形式来继承方法

五、谈谈 This对象的理解

this是函数的内置对象,this是代名词,所以,this代表哪个对象,要看函数属于哪种情况。

this的指向有四种情况:

①当this所在函数是事件处理函数时,this代表事件源

②当this所在函数是构造函数时,this代表new出来的对象

③当this所在函数时类的方法时,this代表调用方法的对象。

④当this所在函数没有明确的所属对象,this代表window对象。

另外:箭头函数根本没有自己的this,它内部的this就是外层代码块的this

补充:

其实,this表示什么意思,更多要看调用,要看运行。因为在调用时,有可能this的指向会被改变。

六、如何解决跨城问题?

1、jsonp 可以使用jsonp来完成跨域,本质上是利用HTML标签的 src属性可以跨域的特性

2、CORS

3、反向代理

七、谈谈你对webpack的看法

Webpack是一个模块打包工具,你可以使用Webpack管理你的模块依赖,并编译输出模块们所需要的静态文件。它能够很好的管理,打包web开发中所用到的HTML,Javascript,CSS以及各种静态文件(图片,字体等),让开发过程更加高效。对于不同类型的资源,webpack有对应的模块加载器。Webpack模块打包器会分析模块间的依赖关系,最后,生成了优化切合并后的静态资源。

webpack的两大特色:

1.code splitting(可以自动完成)

2.loader 可以处理各种类型的静态文件,并且支持串联操作

webpack是以commonJS的形式来书写脚本的,但对AMD/CMD的支持也会很全面,方便旧项目进行代码迁移。

webpack具有requireJS的和browserify的功能,但仍有很多自己的新特性。

1.对CommonJs,AMD,ES6的语法做了兼容;

2.对js,css,图片等资源文件都支持打包。

3.串联模式加载器以及插件机制,让其具有更好的灵活性和拓展性,例如提供对CoffeeScript,ES6的支持

4.有独立的配置文件webpack.config.js

5.可以将代码切割成不同的chunk,实现按需加载,降低了初始时间

6.支持SourceUrls和SourceMaps,易于调试

7.具有强大的Plugin接口,大部分是内部插件,使用起来比较灵活。

8.webpack使用异步IO并具有多级缓存。这使得webpack很快在增量编译上更快

八、说说你对AMD和 Commonjs的理解

CommonJS是服务器端模块的规范,Node.js采用了这个规范。CommonJS规范加载模块是同步的,也就是说,只有加载完成,才能执行后面的操作。

AMD规范则是非同步加载模块,允许指定回调函数。

AMD推荐的风格通过返回一个对象做为模块对象,CommonJS的风格通过对module.exports或exports的属性赋值来达到暴露模块对象的目的

九、常见web安全及防护原理

1、sql注入原理

相信很多同学应该都会听过这个,具体就是通过把sql命令插入到web表单递交或

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值