一、说说你对作用域链的理解
作用域链是指:当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表单递交或